成都理工大學(xué) 雷宇輝 鐘 雯 何 清 唐曼玲 劉超英
Nosql數(shù)據(jù)庫研究文獻(xiàn)綜述
成都理工大學(xué) 雷宇輝 鐘 雯 何 清 唐曼玲 劉超英
隨著擁有海量數(shù)據(jù)寫入的Web 2.0網(wǎng)絡(luò)應(yīng)用的興起以及用戶需求和現(xiàn)代硬件要求的提高,在傳統(tǒng)關(guān)系型數(shù)據(jù)庫因?yàn)樽陨硐拗贫鵁o法解決動(dòng)態(tài)數(shù)據(jù)處理、實(shí)時(shí)數(shù)據(jù)插入等諸類問題的背景下,Nosql數(shù)據(jù)庫毫無疑問成為解決此類辦法的熱門議題之一。
Nosql;web2.0;傳統(tǒng)關(guān)系式數(shù)據(jù)庫
1969年,Edgar Frank Codd首次提出了關(guān)系數(shù)據(jù)庫模型的概念。關(guān)系型數(shù)據(jù)庫以擁有較高事物可靠性的特點(diǎn)在各個(gè)行業(yè)中得到廣泛運(yùn)用。如果從web2.0網(wǎng)站的角度看關(guān)系型數(shù)據(jù)庫,它的許多特征將無用武之地,因?yàn)閭鹘y(tǒng)關(guān)系型數(shù)據(jù)庫不能完全負(fù)荷海量數(shù)據(jù)寫入的web2.0網(wǎng)站。同時(shí),關(guān)系型數(shù)據(jù)庫難以進(jìn)行橫向擴(kuò)展,當(dāng)我們需要對(duì)數(shù)據(jù)進(jìn)行增加、查找、刪除等操作時(shí),有時(shí)需要停機(jī)更改數(shù)據(jù)表結(jié)構(gòu),無法動(dòng)態(tài)進(jìn)行數(shù)據(jù)庫數(shù)據(jù)變更操作。關(guān)系型數(shù)據(jù)庫需要分析提出的SQL操作請求,再根據(jù)請求找到并解鎖相關(guān)的數(shù)據(jù)表,與Nosql數(shù)據(jù)庫相比,增加了一些多余的步驟。
Nosql,是指not only sql,運(yùn)用非關(guān)系式的方法解決傳統(tǒng)數(shù)據(jù)庫無法解決的問題,而并非要取代現(xiàn)在廣泛應(yīng)用的傳統(tǒng)關(guān)系式數(shù)據(jù),。Nosql遵守CAP原則和BASE思想,CAP原則,指的是在分布式系統(tǒng)中,只可以同時(shí)滿足Consistency(一致性)、Availability(可用性)、Tolerance(區(qū)分容錯(cuò)性)其中的兩種要求,不能三種兼顧,因此,不同的Nosql數(shù)據(jù)庫會(huì)根據(jù)自身的開發(fā)目的選擇滿足哪些要求,比如,Mongodb滿足CP要求。BASE是基本可用(Basically Available)、軟狀態(tài)(Soft state)、最終一致性(Eventually consistent)三個(gè)術(shù)語的縮寫,基本可用性是指在分布式系統(tǒng)出現(xiàn)故障時(shí),同意系統(tǒng)部分失去可用性,保證核心部分的可用性,軟狀態(tài)是指同意系統(tǒng)不同節(jié)點(diǎn)同步有延時(shí),最終一致性系統(tǒng)所有數(shù)據(jù)在最后能達(dá)到一致的狀態(tài)的性能。大部分Nosql數(shù)據(jù)庫都遵循BASE思想,舍去高一致性得到可用性和可靠性。
Nosql數(shù)據(jù)庫種類繁多,如果只用一個(gè)Nosql標(biāo)簽來代表所有Nosql數(shù)據(jù)庫就太籠統(tǒng)了,比如memcached和mongodbt這兩種數(shù)據(jù),盡管在都是Nosql數(shù)據(jù)庫的同類比較下彼此也會(huì)顯示出很大的區(qū)別,所以,Nosql數(shù)據(jù)庫大致可以分為以下幾類:
鍵值型數(shù)據(jù)庫,該數(shù)據(jù)庫會(huì)使用哈希表,數(shù)據(jù)以鍵值的形式存放,一個(gè)或多個(gè)鍵對(duì)應(yīng)一個(gè)值。鍵值型數(shù)據(jù)庫處理速度最快,但是必須通過匹配完全一致的鍵查詢數(shù)據(jù)。
列存儲(chǔ)數(shù)據(jù)庫,以列為單位存放數(shù)據(jù)。目前大部分關(guān)系型數(shù)據(jù)庫是以行為單位存放數(shù)據(jù),當(dāng)面對(duì)大量數(shù)據(jù)時(shí),以行為單位的數(shù)據(jù)庫操作會(huì)更加困難,寫入速度降低。對(duì)以列存儲(chǔ)的數(shù)據(jù)庫來說,可以對(duì)大量數(shù)據(jù)進(jìn)行讀取,具有高擴(kuò)展性,但因?yàn)樗季S方式與傳統(tǒng)型數(shù)據(jù)庫多有不同,應(yīng)用困難。
文檔型數(shù)據(jù)庫,將數(shù)據(jù)封裝存儲(chǔ)到未嚴(yán)格定義的以JSON、XML等類型的文件中,雖然它與鍵值型數(shù)據(jù)庫有相似點(diǎn),每個(gè)文檔存儲(chǔ)一個(gè)或多個(gè)鍵值,但不同的是,其中值可以是文件類型。在文檔型數(shù)據(jù)庫中,即使沒有提前定義數(shù)據(jù)表結(jié)構(gòu),也可以繼續(xù)使用。鍵值型數(shù)據(jù)庫必須通過匹配完全一致的鍵查詢數(shù)據(jù),文檔型則可以通過復(fù)雜的查詢條件進(jìn)行操作。但是文檔型數(shù)據(jù)庫沒有事務(wù)處理能力。
圖形數(shù)據(jù)庫,起源于歐拉公式和圖論,應(yīng)用圖論的節(jié)點(diǎn)、關(guān)系、屬性三個(gè)基本要素存放數(shù)據(jù)之間的關(guān)系信息,將點(diǎn)、線、面等基本圖形元素按照一定結(jié)構(gòu)排列的數(shù)據(jù)集合,在此類數(shù)據(jù)庫中,程序員可以任意添加屬性、節(jié)點(diǎn)、關(guān)系且不影響系統(tǒng)的初始狀態(tài),適用于處理復(fù)雜的、相互交叉的數(shù)據(jù),解決復(fù)雜的圖形問題。
4.1 高速響應(yīng)的鍵值數(shù)據(jù)庫memcached
memcached,是LiveJournal旗下的Danga Interactive公司開發(fā)的一款軟件,適用于需要頻繁訪問的、共享數(shù)據(jù)的分布式系統(tǒng)。Memcached中mem代表memory(內(nèi)存),cached代表緩存,它是高性能分布式內(nèi)存緩存服務(wù)器,通過緩存服務(wù)器查詢結(jié)果減少數(shù)據(jù)庫訪問次數(shù),有效提高了動(dòng)態(tài)web的響應(yīng)速度,同時(shí)它也是一個(gè)高性能開源分布式內(nèi)存對(duì)象緩存系統(tǒng),mem-cached數(shù)據(jù)庫的加載均在內(nèi)存中進(jìn)行,在動(dòng)態(tài)中減少數(shù)據(jù)庫負(fù)載提升性能。Memcached利用網(wǎng)絡(luò)連接方式完成服務(wù),可在高并發(fā)條件下迅速響應(yīng)操作需求。Memcached將數(shù)據(jù)保存到內(nèi)存當(dāng)中,雖然是數(shù)據(jù)寫入、讀出非???,但是當(dāng)Memcached停止工作時(shí),比如,操作超出內(nèi)存容量等情況時(shí),數(shù)據(jù)容易丟失。
4.2 高存儲(chǔ)量的列存儲(chǔ)數(shù)據(jù)庫Hbase
Hbase,即Hadoop Database,是一個(gè)高性能、面向?qū)ο?、分布式、面向列的開源數(shù)據(jù)庫。在Hbase中主要以下兩個(gè)主要概念,Row key和Column Family ,Row key用于檢索數(shù)據(jù),Column Family 是指列族且必須在Hbase表使用前定義。Hbase表可以存儲(chǔ)上千萬個(gè)行、支持列的獨(dú)立搜索并且 null列不占據(jù)存儲(chǔ)空間。Hbase有以下物理模型,Region、HLog、Store、客戶端更新操作流程、Hmaster。當(dāng)Hbase中數(shù)據(jù)達(dá)到一定程度,數(shù)據(jù)庫將對(duì)數(shù)據(jù)水平切割并存儲(chǔ)到多臺(tái)服務(wù)器中去,不同用戶來訪時(shí),會(huì)根據(jù)訪問數(shù)據(jù)的不同將用戶分配至相應(yīng)的服務(wù)器中,有效提高了數(shù)據(jù)庫訪問性能。Hbase的數(shù)據(jù)和日志均存儲(chǔ)在Hadoop 分布式文件系作為文件存儲(chǔ)系統(tǒng)中,即使在應(yīng)用過程中服務(wù)器停止服務(wù),數(shù)據(jù)、日志均不會(huì)丟失。但是,Hbase只能按照Row key查詢,并且當(dāng)master停止工作時(shí),整個(gè)系統(tǒng)過停止。
4.3 靈活、可擴(kuò)展的文檔型數(shù)據(jù)庫Mongodb
Mongodb來源于humongous英文單詞中間部分意為巨大的,可以看出Mongodb的主要目的是在于處理包含“大量”的操作,比如大量數(shù)據(jù)的存儲(chǔ),大量數(shù)據(jù)的寫入等。Mongodb將傳統(tǒng)關(guān)系型數(shù)據(jù)庫中“行”替換成“文檔”,它可以運(yùn)行在Windows、linux、OSX等系統(tǒng)上, Mongodb還提供了多種編程語言支持,比如java、php、c#等。
在mongodb中,一個(gè)數(shù)據(jù)庫由一個(gè)或多個(gè)集合組成,一個(gè)集合則由一個(gè)或以上的文檔組成,其中集合可以看做是傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)表。以文檔存儲(chǔ)可以在單獨(dú)的記錄中表示復(fù)雜的關(guān)系,存儲(chǔ)文檔內(nèi)嵌對(duì)象以及數(shù)組等面向?qū)ο蟮臄?shù)據(jù)類型。mongodb中,文檔以二進(jìn)制的JSON格式存儲(chǔ)即BSON格式,支持二進(jìn)制數(shù)據(jù)或大型數(shù)據(jù)的存儲(chǔ),輕巧、高效、靈活。Mongodb也支持在多個(gè)服務(wù)器中自動(dòng)分片技術(shù),在一群節(jié)點(diǎn)中按水平比例分割文檔集,使負(fù)載均衡,使其擁有更高的讀取速度,也可以避免程序員考慮擴(kuò)展問題。同時(shí),mongodb提供了主從式和副本集兩種復(fù)制方式,在副本集中,所有節(jié)點(diǎn)都是彼此的備份節(jié)點(diǎn),沒有單點(diǎn)故障,可用于備份、故障修復(fù)、讀擴(kuò)展等。
4.4 高性能的圖引擎Neo4j
Neo4j是基于Java的高性能的圖形數(shù)據(jù)庫,對(duì)比與傳統(tǒng)關(guān)系型數(shù)據(jù)庫,Neo4j將數(shù)據(jù)從數(shù)據(jù)表轉(zhuǎn)移存儲(chǔ)到圖中。一個(gè)圖包含節(jié)點(diǎn)和關(guān)系兩種數(shù)據(jù)類型,節(jié)點(diǎn)通過關(guān)系相連形成關(guān)系型網(wǎng)絡(luò)結(jié)構(gòu)。Neo4j具備健壯數(shù)據(jù)庫的所有特性,是高性能的圖引擎,在圖中,節(jié)點(diǎn)可以任意增加、刪除、修改,適用于半結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ),解決其浪費(fèi)內(nèi)存問題。Neo4j,根據(jù)深度遍歷接口,可以以相同的速度遍歷邊和節(jié)點(diǎn),解決了擁有大量連接的傳統(tǒng)RDBMS在查詢時(shí)出現(xiàn)的性能衰退問題。
傳統(tǒng)關(guān)系型數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫的關(guān)系是互補(bǔ)的,對(duì)于這兩類數(shù)據(jù)庫,我們需要做到因人而異、因事而異、因時(shí)而異,通常情況下可以使用關(guān)系型數(shù)據(jù)庫,但對(duì)于其不擅長的領(lǐng)域,則可以使用NoSQL數(shù)據(jù)庫彌補(bǔ)不足。
[1]范凱.NoSQL數(shù)據(jù)庫綜述[J].程序員,2010(6):76-78.
[2]申德榮,于戈,王習(xí)特,等.支持大數(shù)據(jù)管理的NoSQL系統(tǒng)研究綜述[J].軟件學(xué)報(bào),2013(8):1786-1803.
[3]陳莉瑩,雙鍇.NoSQL數(shù)據(jù)庫綜述[J]. 2012.
[4]吾木提·那合曼.NoSQL數(shù)據(jù)庫綜述[J].電子世界,2015(17): 146-147.
[5]佐佐木達(dá)也羅勇.NoSQL數(shù)據(jù)庫入門[M].人民郵電出版社,2012.
[6]蕭毅,劉景豊,林威廷,黃奕欽,蔡慶堂,雲(yún)端分散式資料庫技術(shù)之介紹-以MongoDB為例[J].電信研究雙月刊,第42卷第2期,281-294,2012.
[7]霍多羅夫.MongoDB權(quán)威指南[M].人民郵電出版社,2014.
[8]Jeelani Ahmed?, Raafiya Gulmeher. NEW TREND OF DATABASES,EMERGING REASONS,CLASSIFICATION AND SECURITY ISSUES[J]. International Journal of Engineering Sciences & Research Technology, Volume 30; 4(6): 176–184.
[9]Sharma S,Shandilya R,Patnaik S,et al.Leading NoSQL Models for Handling Big Data:A Brief Review[J].International Journal of Business Information Systems,2015.