婁穎
摘 要: 關系數(shù)據(jù)庫在數(shù)據(jù)庫領域長期占有主導地位,一直是高等院校數(shù)據(jù)庫課程的主要內容。而隨著Web2.0的興起,在海量數(shù)據(jù)的環(huán)境下,NoSQL(非關系型的數(shù)據(jù)庫)技術得到了廣泛的應用,它對數(shù)據(jù)庫技術的發(fā)展產生了強烈的影響,同時也對當前數(shù)據(jù)庫課程教學產生了深遠的影響。探討了NoSQL技術及其主要特點,分析了NoSQL技術對數(shù)據(jù)庫教學的挑戰(zhàn),將關系數(shù)據(jù)庫和NoSQL進行對比,指明了使用NoSQL的原因,并提出有關NoSQL的啟發(fā)式教學方法。
關鍵詞: 關系數(shù)據(jù)庫; NoSQL; 海量數(shù)據(jù); 教學
中圖分類號:TP311.13 文獻標志碼:A 文章編號:1006-8228(2013)02-47-03
Analyzing the relationship between NoSQL and teaching database
Lou Ying
(Electronic Information Engineering College, Henan University of Science and Technology, Luoyang, Henan 471003, China)
Abstract: Because of the dominant position in database, the relational database has been always the main content in database curriculum of university. With the rise of Web2.0, in the huge data environment, NoSQL (not relational database) technology is used widely and the current database course teaching has been impacted deeply. NoSQL technology is introduced in this paper and then the challenges of NoSQL database technology to teaching database are analyzed. Finally, the teaching methods of database course are proposed.
Key words: relational database; NoSQL; massive data; teaching
0 引言
NoSQL指的是非關系型的數(shù)據(jù)庫。隨著互聯(lián)網Web2.0網站的興起,傳統(tǒng)的關系數(shù)據(jù)庫在應付Web2.0網站,特別是超大規(guī)模和高并發(fā)的社交網絡類型的Web2.0純動態(tài)網站已經顯得力不從心,暴露出了很多難以克服的問題。例如:關系數(shù)據(jù)庫為了降低數(shù)據(jù)冗余,保證數(shù)據(jù)約束性,在數(shù)據(jù)查詢時不得不使用多個數(shù)據(jù)表之間的連接操作,這極大地降低了查詢效率,不能夠滿足當前Internet的高實時性的要求。而非關系型數(shù)據(jù)庫對并發(fā)的大規(guī)模訪問有著效率上的優(yōu)勢,因此,非關系數(shù)據(jù)庫是在具體應用背景下得到了迅速的發(fā)展。
其實,NoSQL概念最早出現(xiàn)在1998年,當時的含義是反SQL技術革命運動,但并未引起太多的關注。直到2009年,NoSQL概念被來自Rackspace的Eric Evans再次提出,這時的NoSQL已經不是單純的反SQL運動,指的主要是非關系型的分布式數(shù)據(jù)庫,并且不支持原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)的數(shù)據(jù)庫設計模式[1]。在亞特蘭大舉行的有關NoSQL的討論會上,學者給出了NoSQL較為普遍的解釋,即“非關系型的”。并且指出Key-Value存儲和文檔數(shù)據(jù)庫是NoSQL的主要特點,本文認為NoSQL是一項新的與傳統(tǒng)關系數(shù)據(jù)庫有顯著區(qū)別的新技術。
1 NoSQL的主要特點
1.1 Key-Value存儲
Key-Value本身是一種數(shù)據(jù)結構的模式,其基本思想為:一個主鍵下有相應的值,在實現(xiàn)上可以通過哈希表或B樹等不同的數(shù)據(jù)結構完成。Key-Value存儲是以鍵值對的數(shù)據(jù)模型存儲數(shù)據(jù),并能提供持久化分布式存儲系統(tǒng),查詢速度快、存放數(shù)據(jù)量大、支持高并發(fā),非常適合通過主鍵進行查詢機制和數(shù)據(jù)同步等功能[2]。
現(xiàn)有非關系型數(shù)據(jù)庫采用不同的方式實現(xiàn)了Key-Value存儲,并且擁有各自的優(yōu)缺點。然而,性能優(yōu)良的Key-Value存儲需要滿足下列條件:高可用性,即在Key-Value存儲模式下可以提供不間斷的服務;可擴展性,海量數(shù)據(jù)的處理要求存儲模式能夠具有可擴展性;故障恢復,要求該存儲模式下能夠對故障自動感知并能自動恢復。
在具體的實現(xiàn)上,多數(shù)非關系數(shù)據(jù)庫采用單文件進行存儲,雖然單個文件操作具有一定的方便性,但在數(shù)據(jù)量不斷增大時,會遇到存儲瓶頸。為了提高響應速度,Key-Value存儲一般只支持數(shù)據(jù)的添加操作,而不是支持數(shù)據(jù)更新操作。為了實現(xiàn)故障可恢復,需要對數(shù)據(jù)進行備份,數(shù)據(jù)備份操作即從主端向從端的數(shù)據(jù)復制,應用系統(tǒng)的性能在備份過程中會受到影響,備份策略決定了影響程度。然而,數(shù)據(jù)可靠性和性能是一對平衡關系,越是可靠性高的數(shù)據(jù)保障,其性能相對會下降。
1.2 最終一致性
一致性是關系數(shù)據(jù)庫中主要特點[3],關系數(shù)據(jù)庫為了保證一致性需要使用約束條件,從而影響了數(shù)據(jù)的讀寫效率。而非關系數(shù)據(jù)庫只要求保證數(shù)據(jù)的最終一致性,基本思想是:在數(shù)據(jù)的讀寫過程中,對一致性的要求是松散的,而最終完成操作后的結果是一致的。
假設A為對數(shù)據(jù)庫的寫操作,而B和C都代表對數(shù)據(jù)庫的讀操作,且A,B和C之間是相互獨立的。當執(zhí)行了A,即向數(shù)據(jù)庫中寫入數(shù)據(jù),若數(shù)據(jù)庫系統(tǒng)能夠保證隨后B和C的讀操作都能夠讀到最新的數(shù)據(jù),則說明該數(shù)據(jù)庫系統(tǒng)具有強一致性,關系數(shù)據(jù)庫能夠保證強一致性;當執(zhí)行了A,B和C不能夠立即讀到最新的數(shù)據(jù),而是需要經過一段時間才能獲取更新的數(shù)據(jù),則說明該數(shù)據(jù)庫系統(tǒng)具備弱一致性,這段時間也叫做不一致性時間窗口;最終一致性屬于弱一致性的特例,當執(zhí)行了A,在該數(shù)據(jù)沒有再被更新的條件下,B和C最終都讀取到最新的數(shù)據(jù),這就是最終一致性。
最終一致性是在高數(shù)據(jù)量(十幾億條記錄、數(shù)TB數(shù)據(jù))和高訪問量(數(shù)千TPS、數(shù)萬QPS)需求下的選擇,在缺乏種種約束的情況下,最終一致性在一致性要求不高的應用場景下能夠極大提高數(shù)據(jù)訪問效率。
1.3 可擴展
這里的擴展性主要指的是水平擴展性,應用無關和容錯性。關系數(shù)據(jù)通常通過讀寫分離,更換高性能的服務器來提高性能[4],而在海量數(shù)據(jù)的環(huán)境下,這些方法仍然無法滿足某些應用需求。非關系數(shù)據(jù)庫具有水平擴展性的特點。
盡管現(xiàn)有的非關系型數(shù)據(jù)庫采用不同的技術實現(xiàn)可擴展性,但其基本的目標是:在應用不間斷的情況下,增加或刪除數(shù)據(jù)節(jié)點,實現(xiàn)水平擴展;利用分布式計算的技術,通過節(jié)點之間的通訊,實現(xiàn)數(shù)據(jù)分布式處理,滿足海量數(shù)據(jù)的讀寫性能要求。
2 NoSQL技術對數(shù)據(jù)庫教學的影響
長期以來,普通高校計算機專業(yè)的數(shù)據(jù)庫課程以關系數(shù)據(jù)庫為講授內容。作為當前數(shù)據(jù)庫領域不可忽視的力量,NoSQL技術已經引起了許多高校的關注,它給傳統(tǒng)的數(shù)據(jù)庫教學帶來了以下幾個方面的挑戰(zhàn):
挑戰(zhàn)一,教師的認知和講授能力。長期以來,在講授數(shù)據(jù)庫課程時,往往認為關系數(shù)據(jù)庫占主導和統(tǒng)治地位,忽略了對其他數(shù)據(jù)庫的研究。當前高校與市場的聯(lián)系遠遠不如想象的那樣緊密,因此,當前高校教師面對著對NoSQL技術的認知能力,這里不僅包含對技術的掌握和熟悉,而更重要的是對該新興技術的認可。
在授課的過程中,如何把握NoSQL技術和關系數(shù)據(jù)庫的之間的關系,巧妙地融合兩種技術,使學生有個全面和清晰的認識是數(shù)據(jù)庫課程教師的重要工作之一。
挑戰(zhàn)二,學生的接受水平。對于剛剛接觸專業(yè)課程的學生,同時掌握兩種具有對立性質的技術也是學生學習過程中的一個難點。
挑戰(zhàn)三,學校的實驗環(huán)境。實驗一直是數(shù)據(jù)庫課程教學的重要環(huán)節(jié),現(xiàn)有大多數(shù)學校的實驗條件和環(huán)境能夠基本滿足關系數(shù)據(jù)庫技術的教學需要,對于NoSQL技術所在大規(guī)模數(shù)據(jù)處理下的優(yōu)勢,如何構建實驗環(huán)境也是教學的一個重要挑戰(zhàn)。
為了應對這些挑戰(zhàn),我們至少需要弄清楚兩個方面的問題:①為什么要使用NoSQL;②NoSQL技術和關系數(shù)據(jù)庫的聯(lián)系和區(qū)別。
2.1 為什么要使用NoSQL技術
NoSQL技術不是實驗室的產物,而是以實際需求推動的,這里的推動主要指的是互聯(lián)網的發(fā)展在推動。Web2.0時代,用戶每天使用網絡的同時也在制造網絡的內容。例如:用戶在瀏覽微博網站的同時也會發(fā)布自己的信息。這種特點改變了對網站后臺數(shù)據(jù)庫的訪問方式,從原先頻繁的讀操作變成了頻繁的讀寫操作,這時,往往要達到每秒上萬次讀寫請求,關系數(shù)據(jù)庫還能同時勉強應付上萬次的SQL查詢,但是要同時應付上萬次的SQL寫數(shù)據(jù)請求,關系數(shù)據(jù)庫系統(tǒng)就已經無法承受了,對數(shù)據(jù)讀寫操作需求的變化推動了新技術的發(fā)展。
社交網絡是Web2.0的一個重要產物,近年來,社交網絡用戶的規(guī)模日漸增長,2011年8月,F(xiàn)acebook的活躍用戶已經接近7億,用戶對Web的要求也逐步的提高,縮短用戶操作的響應時間已成為提高網絡質量的基本要求。關系數(shù)據(jù)庫在保證數(shù)據(jù)的一致性方面有優(yōu)勢,而在大規(guī)模的用戶操作下,嚴格的一致性對現(xiàn)實的需求來說并不是必須的,高效的數(shù)據(jù)響應才是最重要的,NoSQL在保證最終一致性的情況下能夠實現(xiàn)高效的數(shù)據(jù)訪問。
對于一個Web應用系統(tǒng),在用戶量和訪問量不斷增加的時候,該應用系統(tǒng)需要增加新的服務節(jié)點來提高性能和負載能力,在增加服務節(jié)點時,可以通過增加硬件設施在滿足Web服務器和應用服務器的需求,而對于數(shù)據(jù)服務器,關系數(shù)據(jù)庫模式下很難進行類似增加節(jié)點的水平擴展。因此,在關系數(shù)據(jù)庫的模式下,進行節(jié)點增加時需要停機維護和數(shù)據(jù)遷移,這對于很多需要提供24小時不間斷服務的網站來說是不方便的??梢钥闯?,關系數(shù)據(jù)庫無法滿足應用的可擴展性和高可用性,而NoSQL技術具有水平擴展性的特點,可滿足需求。
從上述分析可知,在互聯(lián)網環(huán)境下處理海量數(shù)據(jù)時,關系數(shù)據(jù)庫無法滿足實際需求。一方面,關系數(shù)據(jù)庫技術中的種種約束(事務管理、完整性約束等)對實際需求來說是沒有必要的;另一方面,這種約束的保證影響了數(shù)據(jù)處理性能。在這種情況下,NoSQL技術就自然而然地成為了人們的選擇并取得了快速的發(fā)展。
2.2 NoSQL與關系數(shù)據(jù)庫的對比
通過上述分析可以看出,NoSQL數(shù)據(jù)庫和關系數(shù)據(jù)庫是根本不同的,兩種數(shù)據(jù)庫分別適應不同的需求。
關系數(shù)據(jù)庫是以表來存儲數(shù)據(jù)的,表的組織形式嚴格,表中的每一行代表一條數(shù)據(jù)記錄,每一列代表特定方面的信息。在設計好表結構(表的列信息)后,修改的代價巨大,數(shù)據(jù)庫表之間存在著聯(lián)系和某種約束關系。所設計的數(shù)據(jù)操作(查詢,添加,修改,刪除)通常涉及對單張表和多個表,在對多個表的操作時需要使用到表之間定義的范式,消除數(shù)據(jù)冗余和保證數(shù)據(jù)一致性是關系數(shù)據(jù)庫的基本要求。長期以來,關系數(shù)據(jù)庫一直以簡潔、規(guī)范和靈活占據(jù)著數(shù)據(jù)庫領域的統(tǒng)治地位,現(xiàn)有關系數(shù)據(jù)庫的產品主要有SQL Server,DB2,Oracle,MySqL等,這些產品都屬于關系數(shù)據(jù)庫管理系統(tǒng),雖然功能有所不同,但基本思想都屬于關系數(shù)據(jù)庫的范疇。正是由于關系數(shù)據(jù)庫的主導地位,在高校計算機學科數(shù)據(jù)庫教學中,關系數(shù)據(jù)庫也一直是該課程講授的重點內容。
NoSQL數(shù)據(jù)主要有三種主流的數(shù)據(jù)模型,除了上面介紹的Key-Value以外,還有列式和文檔兩種。列式也主要使用Table這樣的模型,但是它并不支持關系數(shù)據(jù)庫中的多表連接操作,其主要特點是在存儲數(shù)據(jù)時,主要圍繞著“列”,而不是像關系型數(shù)據(jù)庫那樣根據(jù)“行”進行存儲;在結構上,文檔模式與Key-Value模式想象,不同的是,這里的Value對應的往往是一個文檔。在查詢時,NoSQL數(shù)據(jù)庫往往只支持主鍵或者是單個列查詢,不支持關系數(shù)據(jù)庫多表復雜查詢。在寫操作時,NoSQL數(shù)據(jù)庫對數(shù)據(jù)一致的要求并不是那么高。現(xiàn)有的NoSQL產品很多,主要有Cassandra,HBase,Memcached,Voldemort等。這些數(shù)據(jù)庫的側重點不同,雖然都具備NoSQL的特點,但一些也兼具關系數(shù)據(jù)庫的功能。其中,許多產品是開源的,開源雖然能夠使更多用戶采用,但其可靠性和后期的維護也受到了用戶的質疑。
關系數(shù)據(jù)庫是否能被NoSQL數(shù)據(jù)庫取代呢?答案是否定的。雖然關系數(shù)據(jù)庫在處理Web2.0數(shù)據(jù)時明顯遇到了瓶頸,但不代表它就能被NoSQL技術完全取代。不同的應用背景可有不同的選擇,例如,在金融和電信領域,用戶無法接受數(shù)據(jù)的不一致,因此,關系數(shù)據(jù)庫的一致性對數(shù)據(jù)處理來說就尤為重要。而對一些非核心數(shù)據(jù)的處理,日志的管理和外部數(shù)據(jù)的集成來說,NoSQL技術就更能勝任。因此,應該根據(jù)實際的需求選擇NoSQL技術或者是關系數(shù)據(jù)庫。NoSQL技術是在新的需求下對關系數(shù)據(jù)庫的補充和擴展。這就需要將NoSQL技術和關系數(shù)據(jù)庫進行結合使用,各取所長,需要使用關系特性的時候使用關系數(shù)據(jù)庫,需要使用NoSQL特性的時候使用NoSQL數(shù)據(jù)庫。
2.3 采用啟發(fā)式教學法
啟發(fā)式教學的基本思想是:教師在根據(jù)教學任務和學習的客觀規(guī)律,從實際出發(fā),以啟發(fā)學生的思維為核心,采用多種方式,調動學生的學習主動性和積極性,促使他們生動活潑地學習的一種教學指導思想。
由于NoSQL技術是從實際應用需求產生而來的,具備實際的推動力。因此,教師在講授時,可以首先介紹關系數(shù)據(jù)庫的基本知識,在介紹關系數(shù)據(jù)庫的性能指標,例如:每秒讀寫數(shù)據(jù)的次數(shù),數(shù)據(jù)處理能力的極限等概念時,再描述現(xiàn)實需求。從現(xiàn)實中,學生可以發(fā)現(xiàn)關系數(shù)據(jù)庫的不足,當它的某些優(yōu)點不是必須時,就引出了NoSQL技術。啟發(fā)學生從需求出發(fā)研究技術的思想,真正做到學以致用。
3 結束語
NoSQL技術的應用已經給市場帶來了巨大的影響。本文總結了NoSQL的特點,對比了NoSQL與關系數(shù)據(jù)之間的區(qū)別,提出了NoSQL技術給高校計算機教學帶來的挑戰(zhàn)。面對計算機技術高速發(fā)展的時代,高校計算機的教學模式是否能夠適應當前教育的需要,在數(shù)據(jù)庫教學方面,如果仍然按照固定的教學模式,將關系數(shù)據(jù)庫不可動搖地位的思想傳遞給學生,顯然是不合理的。因此,我們需要在重視理論教育的同時,研究技術發(fā)展的動態(tài),以更客觀和合理的方法講授課程。T技術是一項發(fā)展迅速的技術,在未來的教學工作中,知識的傳播已經不是高等教育的主要任務,而啟發(fā)式的引導才能豐富高校的教學成果。
參考文獻:
[1] Thomas, R. H. A majority consensus approach to concurrencycontrol for multiple copy databases. ACM Transactions on Database Systems,1979.4(2):180-209
[2] Chris Bunch, NavrajChohan, Chandra Krintz, JovanChohan,Jonathan Kupferman, Puneet-Lakhina, YimingLi, Yoshihide Nomura. Key-Value Data stores Comparison in App Scale. February 17, 2010 UCSB Tech Report,2010.3.
[3] 孟小峰,周龍驤,王珊.數(shù)據(jù)庫技術發(fā)展趨勢[J].軟件學報, 2004.
[4] Andrew Pavlo, Erik Paulson, Alexander Rasin, Daniel J.Abadi,David J. DeWitt, Samuel Madden and Michael Stonebraker. A Comparison of Approaches to Large-Scale Data Analysis.