婁穎
摘 要: 關(guān)系數(shù)據(jù)庫在數(shù)據(jù)庫領(lǐng)域長期占有主導(dǎo)地位,一直是高等院校數(shù)據(jù)庫課程的主要內(nèi)容。而隨著Web2.0的興起,在海量數(shù)據(jù)的環(huán)境下,NoSQL(非關(guān)系型的數(shù)據(jù)庫)技術(shù)得到了廣泛的應(yīng)用,它對數(shù)據(jù)庫技術(shù)的發(fā)展產(chǎn)生了強(qiáng)烈的影響,同時也對當(dāng)前數(shù)據(jù)庫課程教學(xué)產(chǎn)生了深遠(yuǎn)的影響。探討了NoSQL技術(shù)及其主要特點(diǎn),分析了NoSQL技術(shù)對數(shù)據(jù)庫教學(xué)的挑戰(zhàn),將關(guān)系數(shù)據(jù)庫和NoSQL進(jìn)行對比,指明了使用NoSQL的原因,并提出有關(guān)NoSQL的啟發(fā)式教學(xué)方法。
關(guān)鍵詞: 關(guān)系數(shù)據(jù)庫; NoSQL; 海量數(shù)據(jù); 教學(xué)
中圖分類號:TP311.13 文獻(xiàn)標(biāo)志碼: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指的是非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)Web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付Web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的社交網(wǎng)絡(luò)類型的Web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露出了很多難以克服的問題。例如:關(guān)系數(shù)據(jù)庫為了降低數(shù)據(jù)冗余,保證數(shù)據(jù)約束性,在數(shù)據(jù)查詢時不得不使用多個數(shù)據(jù)表之間的連接操作,這極大地降低了查詢效率,不能夠滿足當(dāng)前Internet的高實(shí)時性的要求。而非關(guān)系型數(shù)據(jù)庫對并發(fā)的大規(guī)模訪問有著效率上的優(yōu)勢,因此,非關(guān)系數(shù)據(jù)庫是在具體應(yīng)用背景下得到了迅速的發(fā)展。
其實(shí),NoSQL概念最早出現(xiàn)在1998年,當(dāng)時的含義是反SQL技術(shù)革命運(yùn)動,但并未引起太多的關(guān)注。直到2009年,NoSQL概念被來自Rackspace的Eric Evans再次提出,這時的NoSQL已經(jīng)不是單純的反SQL運(yùn)動,指的主要是非關(guān)系型的分布式數(shù)據(jù)庫,并且不支持原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)的數(shù)據(jù)庫設(shè)計(jì)模式[1]。在亞特蘭大舉行的有關(guān)NoSQL的討論會上,學(xué)者給出了NoSQL較為普遍的解釋,即“非關(guān)系型的”。并且指出Key-Value存儲和文檔數(shù)據(jù)庫是NoSQL的主要特點(diǎn),本文認(rèn)為NoSQL是一項(xiàng)新的與傳統(tǒng)關(guān)系數(shù)據(jù)庫有顯著區(qū)別的新技術(shù)。
1 NoSQL的主要特點(diǎn)
1.1 Key-Value存儲
Key-Value本身是一種數(shù)據(jù)結(jié)構(gòu)的模式,其基本思想為:一個主鍵下有相應(yīng)的值,在實(shí)現(xiàn)上可以通過哈希表或B樹等不同的數(shù)據(jù)結(jié)構(gòu)完成。Key-Value存儲是以鍵值對的數(shù)據(jù)模型存儲數(shù)據(jù),并能提供持久化分布式存儲系統(tǒng),查詢速度快、存放數(shù)據(jù)量大、支持高并發(fā),非常適合通過主鍵進(jìn)行查詢機(jī)制和數(shù)據(jù)同步等功能[2]。
現(xiàn)有非關(guān)系型數(shù)據(jù)庫采用不同的方式實(shí)現(xiàn)了Key-Value存儲,并且擁有各自的優(yōu)缺點(diǎn)。然而,性能優(yōu)良的Key-Value存儲需要滿足下列條件:高可用性,即在Key-Value存儲模式下可以提供不間斷的服務(wù);可擴(kuò)展性,海量數(shù)據(jù)的處理要求存儲模式能夠具有可擴(kuò)展性;故障恢復(fù),要求該存儲模式下能夠?qū)收献詣痈兄⒛茏詣踊謴?fù)。
在具體的實(shí)現(xiàn)上,多數(shù)非關(guān)系數(shù)據(jù)庫采用單文件進(jìn)行存儲,雖然單個文件操作具有一定的方便性,但在數(shù)據(jù)量不斷增大時,會遇到存儲瓶頸。為了提高響應(yīng)速度,Key-Value存儲一般只支持?jǐn)?shù)據(jù)的添加操作,而不是支持?jǐn)?shù)據(jù)更新操作。為了實(shí)現(xiàn)故障可恢復(fù),需要對數(shù)據(jù)進(jìn)行備份,數(shù)據(jù)備份操作即從主端向從端的數(shù)據(jù)復(fù)制,應(yīng)用系統(tǒng)的性能在備份過程中會受到影響,備份策略決定了影響程度。然而,數(shù)據(jù)可靠性和性能是一對平衡關(guān)系,越是可靠性高的數(shù)據(jù)保障,其性能相對會下降。
1.2 最終一致性
一致性是關(guān)系數(shù)據(jù)庫中主要特點(diǎn)[3],關(guān)系數(shù)據(jù)庫為了保證一致性需要使用約束條件,從而影響了數(shù)據(jù)的讀寫效率。而非關(guān)系數(shù)據(jù)庫只要求保證數(shù)據(jù)的最終一致性,基本思想是:在數(shù)據(jù)的讀寫過程中,對一致性的要求是松散的,而最終完成操作后的結(jié)果是一致的。
假設(shè)A為對數(shù)據(jù)庫的寫操作,而B和C都代表對數(shù)據(jù)庫的讀操作,且A,B和C之間是相互獨(dú)立的。當(dāng)執(zhí)行了A,即向數(shù)據(jù)庫中寫入數(shù)據(jù),若數(shù)據(jù)庫系統(tǒng)能夠保證隨后B和C的讀操作都能夠讀到最新的數(shù)據(jù),則說明該數(shù)據(jù)庫系統(tǒng)具有強(qiáng)一致性,關(guān)系數(shù)據(jù)庫能夠保證強(qiáng)一致性;當(dāng)執(zhí)行了A,B和C不能夠立即讀到最新的數(shù)據(jù),而是需要經(jīng)過一段時間才能獲取更新的數(shù)據(jù),則說明該數(shù)據(jù)庫系統(tǒng)具備弱一致性,這段時間也叫做不一致性時間窗口;最終一致性屬于弱一致性的特例,當(dāng)執(zhí)行了A,在該數(shù)據(jù)沒有再被更新的條件下,B和C最終都讀取到最新的數(shù)據(jù),這就是最終一致性。
最終一致性是在高數(shù)據(jù)量(十幾億條記錄、數(shù)TB數(shù)據(jù))和高訪問量(數(shù)千TPS、數(shù)萬QPS)需求下的選擇,在缺乏種種約束的情況下,最終一致性在一致性要求不高的應(yīng)用場景下能夠極大提高數(shù)據(jù)訪問效率。
1.3 可擴(kuò)展
這里的擴(kuò)展性主要指的是水平擴(kuò)展性,應(yīng)用無關(guān)和容錯性。關(guān)系數(shù)據(jù)通常通過讀寫分離,更換高性能的服務(wù)器來提高性能[4],而在海量數(shù)據(jù)的環(huán)境下,這些方法仍然無法滿足某些應(yīng)用需求。非關(guān)系數(shù)據(jù)庫具有水平擴(kuò)展性的特點(diǎn)。
盡管現(xiàn)有的非關(guān)系型數(shù)據(jù)庫采用不同的技術(shù)實(shí)現(xiàn)可擴(kuò)展性,但其基本的目標(biāo)是:在應(yīng)用不間斷的情況下,增加或刪除數(shù)據(jù)節(jié)點(diǎn),實(shí)現(xiàn)水平擴(kuò)展;利用分布式計(jì)算的技術(shù),通過節(jié)點(diǎn)之間的通訊,實(shí)現(xiàn)數(shù)據(jù)分布式處理,滿足海量數(shù)據(jù)的讀寫性能要求。
2 NoSQL技術(shù)對數(shù)據(jù)庫教學(xué)的影響
長期以來,普通高校計(jì)算機(jī)專業(yè)的數(shù)據(jù)庫課程以關(guān)系數(shù)據(jù)庫為講授內(nèi)容。作為當(dāng)前數(shù)據(jù)庫領(lǐng)域不可忽視的力量,NoSQL技術(shù)已經(jīng)引起了許多高校的關(guān)注,它給傳統(tǒng)的數(shù)據(jù)庫教學(xué)帶來了以下幾個方面的挑戰(zhàn):
挑戰(zhàn)一,教師的認(rèn)知和講授能力。長期以來,在講授數(shù)據(jù)庫課程時,往往認(rèn)為關(guān)系數(shù)據(jù)庫占主導(dǎo)和統(tǒng)治地位,忽略了對其他數(shù)據(jù)庫的研究。當(dāng)前高校與市場的聯(lián)系遠(yuǎn)遠(yuǎn)不如想象的那樣緊密,因此,當(dāng)前高校教師面對著對NoSQL技術(shù)的認(rèn)知能力,這里不僅包含對技術(shù)的掌握和熟悉,而更重要的是對該新興技術(shù)的認(rèn)可。
在授課的過程中,如何把握NoSQL技術(shù)和關(guān)系數(shù)據(jù)庫的之間的關(guān)系,巧妙地融合兩種技術(shù),使學(xué)生有個全面和清晰的認(rèn)識是數(shù)據(jù)庫課程教師的重要工作之一。
挑戰(zhàn)二,學(xué)生的接受水平。對于剛剛接觸專業(yè)課程的學(xué)生,同時掌握兩種具有對立性質(zhì)的技術(shù)也是學(xué)生學(xué)習(xí)過程中的一個難點(diǎn)。
挑戰(zhàn)三,學(xué)校的實(shí)驗(yàn)環(huán)境。實(shí)驗(yàn)一直是數(shù)據(jù)庫課程教學(xué)的重要環(huán)節(jié),現(xiàn)有大多數(shù)學(xué)校的實(shí)驗(yàn)條件和環(huán)境能夠基本滿足關(guān)系數(shù)據(jù)庫技術(shù)的教學(xué)需要,對于NoSQL技術(shù)所在大規(guī)模數(shù)據(jù)處理下的優(yōu)勢,如何構(gòu)建實(shí)驗(yàn)環(huán)境也是教學(xué)的一個重要挑戰(zhàn)。
為了應(yīng)對這些挑戰(zhàn),我們至少需要弄清楚兩個方面的問題:①為什么要使用NoSQL;②NoSQL技術(shù)和關(guān)系數(shù)據(jù)庫的聯(lián)系和區(qū)別。
2.1 為什么要使用NoSQL技術(shù)
NoSQL技術(shù)不是實(shí)驗(yàn)室的產(chǎn)物,而是以實(shí)際需求推動的,這里的推動主要指的是互聯(lián)網(wǎng)的發(fā)展在推動。Web2.0時代,用戶每天使用網(wǎng)絡(luò)的同時也在制造網(wǎng)絡(luò)的內(nèi)容。例如:用戶在瀏覽微博網(wǎng)站的同時也會發(fā)布自己的信息。這種特點(diǎn)改變了對網(wǎng)站后臺數(shù)據(jù)庫的訪問方式,從原先頻繁的讀操作變成了頻繁的讀寫操作,這時,往往要達(dá)到每秒上萬次讀寫請求,關(guān)系數(shù)據(jù)庫還能同時勉強(qiáng)應(yīng)付上萬次的SQL查詢,但是要同時應(yīng)付上萬次的SQL寫數(shù)據(jù)請求,關(guān)系數(shù)據(jù)庫系統(tǒng)就已經(jīng)無法承受了,對數(shù)據(jù)讀寫操作需求的變化推動了新技術(shù)的發(fā)展。
社交網(wǎng)絡(luò)是Web2.0的一個重要產(chǎn)物,近年來,社交網(wǎng)絡(luò)用戶的規(guī)模日漸增長,2011年8月,F(xiàn)acebook的活躍用戶已經(jīng)接近7億,用戶對Web的要求也逐步的提高,縮短用戶操作的響應(yīng)時間已成為提高網(wǎng)絡(luò)質(zhì)量的基本要求。關(guān)系數(shù)據(jù)庫在保證數(shù)據(jù)的一致性方面有優(yōu)勢,而在大規(guī)模的用戶操作下,嚴(yán)格的一致性對現(xiàn)實(shí)的需求來說并不是必須的,高效的數(shù)據(jù)響應(yīng)才是最重要的,NoSQL在保證最終一致性的情況下能夠?qū)崿F(xiàn)高效的數(shù)據(jù)訪問。
對于一個Web應(yīng)用系統(tǒng),在用戶量和訪問量不斷增加的時候,該應(yīng)用系統(tǒng)需要增加新的服務(wù)節(jié)點(diǎn)來提高性能和負(fù)載能力,在增加服務(wù)節(jié)點(diǎn)時,可以通過增加硬件設(shè)施在滿足Web服務(wù)器和應(yīng)用服務(wù)器的需求,而對于數(shù)據(jù)服務(wù)器,關(guān)系數(shù)據(jù)庫模式下很難進(jìn)行類似增加節(jié)點(diǎn)的水平擴(kuò)展。因此,在關(guān)系數(shù)據(jù)庫的模式下,進(jìn)行節(jié)點(diǎn)增加時需要停機(jī)維護(hù)和數(shù)據(jù)遷移,這對于很多需要提供24小時不間斷服務(wù)的網(wǎng)站來說是不方便的??梢钥闯?,關(guān)系數(shù)據(jù)庫無法滿足應(yīng)用的可擴(kuò)展性和高可用性,而NoSQL技術(shù)具有水平擴(kuò)展性的特點(diǎn),可滿足需求。
從上述分析可知,在互聯(lián)網(wǎng)環(huán)境下處理海量數(shù)據(jù)時,關(guān)系數(shù)據(jù)庫無法滿足實(shí)際需求。一方面,關(guān)系數(shù)據(jù)庫技術(shù)中的種種約束(事務(wù)管理、完整性約束等)對實(shí)際需求來說是沒有必要的;另一方面,這種約束的保證影響了數(shù)據(jù)處理性能。在這種情況下,NoSQL技術(shù)就自然而然地成為了人們的選擇并取得了快速的發(fā)展。
2.2 NoSQL與關(guān)系數(shù)據(jù)庫的對比
通過上述分析可以看出,NoSQL數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫是根本不同的,兩種數(shù)據(jù)庫分別適應(yīng)不同的需求。
關(guān)系數(shù)據(jù)庫是以表來存儲數(shù)據(jù)的,表的組織形式嚴(yán)格,表中的每一行代表一條數(shù)據(jù)記錄,每一列代表特定方面的信息。在設(shè)計(jì)好表結(jié)構(gòu)(表的列信息)后,修改的代價巨大,數(shù)據(jù)庫表之間存在著聯(lián)系和某種約束關(guān)系。所設(shè)計(jì)的數(shù)據(jù)操作(查詢,添加,修改,刪除)通常涉及對單張表和多個表,在對多個表的操作時需要使用到表之間定義的范式,消除數(shù)據(jù)冗余和保證數(shù)據(jù)一致性是關(guān)系數(shù)據(jù)庫的基本要求。長期以來,關(guān)系數(shù)據(jù)庫一直以簡潔、規(guī)范和靈活占據(jù)著數(shù)據(jù)庫領(lǐng)域的統(tǒng)治地位,現(xiàn)有關(guān)系數(shù)據(jù)庫的產(chǎn)品主要有SQL Server,DB2,Oracle,MySqL等,這些產(chǎn)品都屬于關(guān)系數(shù)據(jù)庫管理系統(tǒng),雖然功能有所不同,但基本思想都屬于關(guān)系數(shù)據(jù)庫的范疇。正是由于關(guān)系數(shù)據(jù)庫的主導(dǎo)地位,在高校計(jì)算機(jī)學(xué)科數(shù)據(jù)庫教學(xué)中,關(guān)系數(shù)據(jù)庫也一直是該課程講授的重點(diǎn)內(nèi)容。
NoSQL數(shù)據(jù)主要有三種主流的數(shù)據(jù)模型,除了上面介紹的Key-Value以外,還有列式和文檔兩種。列式也主要使用Table這樣的模型,但是它并不支持關(guān)系數(shù)據(jù)庫中的多表連接操作,其主要特點(diǎn)是在存儲數(shù)據(jù)時,主要圍繞著“列”,而不是像關(guān)系型數(shù)據(jù)庫那樣根據(jù)“行”進(jìn)行存儲;在結(jié)構(gòu)上,文檔模式與Key-Value模式想象,不同的是,這里的Value對應(yīng)的往往是一個文檔。在查詢時,NoSQL數(shù)據(jù)庫往往只支持主鍵或者是單個列查詢,不支持關(guān)系數(shù)據(jù)庫多表復(fù)雜查詢。在寫操作時,NoSQL數(shù)據(jù)庫對數(shù)據(jù)一致的要求并不是那么高?,F(xiàn)有的NoSQL產(chǎn)品很多,主要有Cassandra,HBase,Memcached,Voldemort等。這些數(shù)據(jù)庫的側(cè)重點(diǎn)不同,雖然都具備NoSQL的特點(diǎn),但一些也兼具關(guān)系數(shù)據(jù)庫的功能。其中,許多產(chǎn)品是開源的,開源雖然能夠使更多用戶采用,但其可靠性和后期的維護(hù)也受到了用戶的質(zhì)疑。
關(guān)系數(shù)據(jù)庫是否能被NoSQL數(shù)據(jù)庫取代呢?答案是否定的。雖然關(guān)系數(shù)據(jù)庫在處理Web2.0數(shù)據(jù)時明顯遇到了瓶頸,但不代表它就能被NoSQL技術(shù)完全取代。不同的應(yīng)用背景可有不同的選擇,例如,在金融和電信領(lǐng)域,用戶無法接受數(shù)據(jù)的不一致,因此,關(guān)系數(shù)據(jù)庫的一致性對數(shù)據(jù)處理來說就尤為重要。而對一些非核心數(shù)據(jù)的處理,日志的管理和外部數(shù)據(jù)的集成來說,NoSQL技術(shù)就更能勝任。因此,應(yīng)該根據(jù)實(shí)際的需求選擇NoSQL技術(shù)或者是關(guān)系數(shù)據(jù)庫。NoSQL技術(shù)是在新的需求下對關(guān)系數(shù)據(jù)庫的補(bǔ)充和擴(kuò)展。這就需要將NoSQL技術(shù)和關(guān)系數(shù)據(jù)庫進(jìn)行結(jié)合使用,各取所長,需要使用關(guān)系特性的時候使用關(guān)系數(shù)據(jù)庫,需要使用NoSQL特性的時候使用NoSQL數(shù)據(jù)庫。
2.3 采用啟發(fā)式教學(xué)法
啟發(fā)式教學(xué)的基本思想是:教師在根據(jù)教學(xué)任務(wù)和學(xué)習(xí)的客觀規(guī)律,從實(shí)際出發(fā),以啟發(fā)學(xué)生的思維為核心,采用多種方式,調(diào)動學(xué)生的學(xué)習(xí)主動性和積極性,促使他們生動活潑地學(xué)習(xí)的一種教學(xué)指導(dǎo)思想。
由于NoSQL技術(shù)是從實(shí)際應(yīng)用需求產(chǎn)生而來的,具備實(shí)際的推動力。因此,教師在講授時,可以首先介紹關(guān)系數(shù)據(jù)庫的基本知識,在介紹關(guān)系數(shù)據(jù)庫的性能指標(biāo),例如:每秒讀寫數(shù)據(jù)的次數(shù),數(shù)據(jù)處理能力的極限等概念時,再描述現(xiàn)實(shí)需求。從現(xiàn)實(shí)中,學(xué)生可以發(fā)現(xiàn)關(guān)系數(shù)據(jù)庫的不足,當(dāng)它的某些優(yōu)點(diǎn)不是必須時,就引出了NoSQL技術(shù)。啟發(fā)學(xué)生從需求出發(fā)研究技術(shù)的思想,真正做到學(xué)以致用。
3 結(jié)束語
NoSQL技術(shù)的應(yīng)用已經(jīng)給市場帶來了巨大的影響。本文總結(jié)了NoSQL的特點(diǎn),對比了NoSQL與關(guān)系數(shù)據(jù)之間的區(qū)別,提出了NoSQL技術(shù)給高校計(jì)算機(jī)教學(xué)帶來的挑戰(zhàn)。面對計(jì)算機(jī)技術(shù)高速發(fā)展的時代,高校計(jì)算機(jī)的教學(xué)模式是否能夠適應(yīng)當(dāng)前教育的需要,在數(shù)據(jù)庫教學(xué)方面,如果仍然按照固定的教學(xué)模式,將關(guān)系數(shù)據(jù)庫不可動搖地位的思想傳遞給學(xué)生,顯然是不合理的。因此,我們需要在重視理論教育的同時,研究技術(shù)發(fā)展的動態(tài),以更客觀和合理的方法講授課程。T技術(shù)是一項(xiàng)發(fā)展迅速的技術(shù),在未來的教學(xué)工作中,知識的傳播已經(jīng)不是高等教育的主要任務(wù),而啟發(fā)式的引導(dǎo)才能豐富高校的教學(xué)成果。
參考文獻(xiàn):
[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] 孟小峰,周龍?bào)J,王珊.數(shù)據(jù)庫技術(shù)發(fā)展趨勢[J].軟件學(xué)報(bào), 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.