《Survey on NoSQL Database》翻譯

Survey on NoSQLDatabase

 

摘要

隨着互聯網和雲計算的發展,越來越要求數據庫能夠高效地存儲和處理大規模數據,特別是讀寫的性能,因此,傳統的關係數據庫正面臨許多新挑戰。特別是在大規模,高併發應用程序中,諸如搜索引擎和SNS,使用關係數據庫來存儲和查詢動態用戶數據已經顯得不夠。在這種情況下,NoSQL數據庫誕生了。本文描述了NoSQL的背景,基本特徵以及數據模型。另外,本文根據CAP理論對NoSQL數據庫進行了分類。最後,本文詳細介紹了一些主流的數據庫,並且提取一些屬性,以幫助企業選擇NoSQL

 

1.  介紹

隨着互聯網和雲計算的不斷髮展,各種類型的應用已經出現,這對數據庫技術提出了更多的需求,主要體現在一下幾個方面:

l  高併發,低延遲的讀寫

數據庫被需求高併發,低延遲的讀寫,與此同時,爲了大大提升客戶體驗,也要求數據庫去幫助應用做出更快的反應。

l  高效的大數據存儲和訪問需求

像SNS和搜索引擎之類的大的應用,需要數據庫能夠有效的存儲數據(PB級別),並且可以對數以百萬計的查詢作出反應。

l  高擴展性和高可用性

隨着越來越多的併發請求和數據,數據庫需要能夠支持容易擴展和升級,確保快速不間斷的服務。

l  降低管理和運營成本

隨着數據量的動態的增長,數據庫成本的急劇增加,包括硬件成本,軟件費用和運營成本。因此需要低成本存儲大數據。

 

雖然關係數據庫已經在數據存儲領域佔據很高的位置,但面對上述問題時,它有一些固有的侷限性:

l  讀寫太慢

關係數據庫本身具有一定的邏輯複雜性,隨着數據規模的增加,很容易出現死鎖和其他併發問題,這導致了讀寫效率的快速下降;

l  容量有限

傳統的關係型數據庫不能處理搜索引擎,SNS或大系統中的數據。

l  難於擴展

關係數據庫中的多表關聯機制成爲制約數據庫擴展的主要因素。

 

  爲了解決上述傳統數據庫遇到的問題,一大批新型的數據庫系統出現了。大體上看,這些新的數據庫跟傳統的數據庫系統有着很大的區別,我們把他叫做NoSQL數據庫。NoSQL也被解釋爲“NOTONLY SQL”,以說明NoSQL的優勢。介紹完背景之後,我們將注意力集中在NoSQL數據庫的優勢和缺點上。

 

 

 

2.  特徵,數據模型和分類

2.1NoSQL的特徵

NoSQL的主要優點有如下方面:

1)  快速讀寫數據

2)  支持大容量存儲

3)  易於擴展

4)  低成本

同時,NoSQL也有一些不足之處,比如不支持業界的SQL標準,缺乏事務支持,缺乏報告及其他額外特徵,絕大部分近年誕生的NoSQL數據庫系統仍然不夠成熟。上述的NoSQL數據庫的特點是常見的,在現實中,每個產品符合不同的數據模型和CAP定理。因此,我們將要介紹NoSQL數據庫的數據模型,然後根據CAP定理將NoSQL進行分類。

 

2.2數據模型

傳統數據庫的數據模型,主要是關係,特別是支持連帶類操作和ACID事務,但在NoSQL中,主流數據模型如下:

2.2.1  鍵值模型

鍵值的數據模型意味着值對應於鍵,儘管這種結構很簡單,但是其查詢速度要遠高於關係型數據庫,並且支持大規模和高併發。通過主鍵對數據的查詢和修改操作也能夠很好的支持。

2.2.2  面向列

列數據庫使用表作爲數據模型,但是不支持表的關聯。面向列的數據庫有以下幾個特徵:

1)  數據以列存儲,即將數據按列分別存儲;

2)  數據的每一列都是數據庫的索引;

3)  只訪問查詢涉及到列,以減小系統的I/O

4)  併發進程的查詢,即,每一列由一個進程處理;

5)  每列具有相同的類型的數據,有類似的特性和良好的壓縮比

總的來說,該數據模型的優點在於它更適用於基於聚合和數據倉庫的應用。

2.2.3  文件

文件和鍵值模型在結構上非常的相似,但是文件數據庫的值是帶有語義的,通常以JSON或者XML格式存儲。另外,文件數據庫可以建立一個輔助索引以方便上層應用程序,但是鍵值數據庫不能做到這點。

 

 

2.3CAP理論和數據庫分類

2000年Eric Brewer教授提出著名的CAP理論。CAP分別指的是:一致性(Consistency),可用性(Availability)和網絡分區容忍(tolerance of networkPartition)。CAP理論的核心思想是分佈式系統不能同時滿足以上3個方面,最多同時滿足其中的兩點。

根據CAP理論和對於NoSQL系統的不同關注點,可以對NoSQL數據庫做一個初步的分類,如下所示:

l  關注一致性和可用性(CA)

部分數據庫不關注分區容忍性,它們主要使用複製的方法來確保數據的一致性和可用性。屬於CA的系統有:傳統的關係型數據庫,Vertica(面向列),Aster Data(關係型),GreenPlum(關係型)等等。

l  關注一致性和分區容忍性(CP)

這樣的數據庫系統將數據存儲在分佈式節點當中,並且保證這些數據的一致性,但是對於可用性的主持做得不夠好。主要的CP系統有:BigTable(面向列),HyperTable(面向列),HBase(面向列),MongoDB(文件),Terrastore(文件),Redis(鍵值),Scalaris(鍵值),MemcacheDB(鍵值),BerkeleyDB(鍵值)。

l  關注可用性和分區容忍性(AP)

這種系統主要通過實現一致性,確保可用性和分區容忍性,AP系統有:Voldemort(鍵值),Tokyo Cabinet(鍵值),KAI(鍵值),CouchDB (文件),SimpleDB(文件),Riak(文件)。

 

 

3.  主流NoSQL數據庫系統

3.1鍵值數據庫

3.1.1  Redis

Redis是一個非常新的項目,有如下幾個特徵:

1)  Redis是一個鍵值存儲的數據庫:當Redis運行的時候,數據都被加載到內存當中,因此所有的操作都是在內存當中完成的,然後週期異步的將數據保存到磁盤上。這種純內存的操作使得Redis有着優異的性能。Redis能夠在1s內同時處理一百萬讀寫操作。

2)  Redis支持List和Set還有許多相關的操作。

3)  最高值限制1GB;

4)  Redis最大缺點是數據庫的大小受制於物理內存的大小,因此Redis不能夠處理大規模數據,它的可擴展性較差。

因此,Redis適用於那些小規模數據的處理,並且有較好的性能。

3.1.2  Tokyo Cabinet- Tokyo Tyrant

TC和TT由Mikio Hirabayashi開發,主要用在日本最大SNS網站mixi.jp ,這兩個系統已經發展的較爲成熟了。TC是一款高性能存儲引擎,而TT提供多線程高併發服務器,它可以處理4-5萬次每秒讀寫操作。TC保證了高性能高併發讀寫,而且使用可靠的數據持久化機制。TC不僅僅支持鍵值,而且支持類似關係型數據庫中hashtable,另外,還支持簡單操作,如like條件查詢,分頁和排序操作。

TC最大的缺點是當數據量增長到十億級別的時候,併發寫的性能會急劇下降。

3.1.3  Flare

Flare是由日本第二大SNS網站green.jp開發。Flare比TC要強,因爲它延伸了數據庫的可擴展性。Flare添加了一個node server去管理data server,因此,用戶可以動態的添加刪除data server,並且也提供了一定的容錯性。然而,Falre僅支持memcached協議,當使用Flare的時候,我們不能使用TC的表數據結構,只能夠使用TC的鍵值數據結構。

 

3.2列數據庫

雖然現在面向列的數據庫還沒有顛覆傳統的面向行的數據庫,但是在以數據壓縮,無共享,大規模並行處理的架構下,列數據庫仍可以保持數據分析能力和商業智能處理的高性能。面向列的數據有HBase,耶魯大學的HadoopDB,Facebook的Cassandra,Hypertable,Google的Bigtable和Yahoo的Punts等等。

3.2.1  Cassandra

Cassandra是facebook的開源數據庫。

它有如下特點:

1)  數據庫模式是非常靈活的,並且不需要提前設計數據庫的模式,非常便於添加或刪除字段。

2)  支持範圍查詢,也就是說查詢某個範圍的鍵值

3)  高擴展性,單點故障不會影響整個集羣提供服務,能夠支持線性擴展。

Cassandra是一個分佈式數據庫系統,它由許多分佈式數據庫節點組成,一個寫操作能夠複製到其他節點當中,讀請求也能夠路由到中心節點上。對於一個Cassandra集羣,添加節點可以實現可擴展性的目標。另外,Cassandra還支持豐富的數據結構和強大的查詢語言。

3.2.2  Hypertable

Zvents 搜索引擎仿照Bigtable開發了開源的分佈式存儲系統Hypertable。這個系統被設計成包含1000個節點,能夠部署在HDFS或者KFS上。雖然Hypertable的仍處於處於起步階段,但表現並不差:當往Hypertable中寫入28M的列數據時,它的寫入速度能夠達到7MB每秒,讀的速度能夠達到1M cell每秒。然而,並沒有許多高負載,大存儲量的應用使用Hypertable。

3.3文件數據庫

3.3.1  MongoDB

MongoDB是一個介於傳統數據庫和非關係型數據庫之間的數據庫產品,它的特徵如下:

1)  它是一個非關係型數據庫,卻有着最像關係型數據庫的特徵;

2)  支持複雜的數據類型:MongoDB支持存儲複雜數據類型的bjson數據結構;

3)  強大的查詢語言:它幾乎支持所有傳統關係型數據庫中單表上的功能型查詢,而且能夠支持索引。

4)  高速訪問海量數據:當數據規模超過50GB的時候,MongoDB的訪問速度是MySQL的速度的10倍。

正是由於以上的因素,有很多數據量正在增長的項目正考慮使用MongoDB代替傳統的關係型數據庫。

3.3.2  CouchDB

Apache CouchDB是一個可伸縮的,支持容錯的數據庫,它能夠支持JSON和AtomPub格式,提供REST風格的API。爲了保證數據的一致性,CouchDB提供P2P爲基礎的支持雙向複製的分佈式數據庫解決方案。然而,CouchDB也有一些缺陷,比如說僅僅提供一個基於Http REST的接口,併發讀寫性能不理想等等。

4 結論

基於以上對於主流NoSQL數據庫的分析,商業公司決定使用NoSQL的時候,它需要考慮如下因素:商業模型,ACID事務的需求,成本以及其他的需求。

此外,還要從以下幾個方面:

l  數據模型

l  CAP支持

l  多數據中心支持

l  容量

l  性能

l  查詢接口

l  可靠性

l  數據持久

l  平衡性

l  商業支持

本文首先描述了NoSQL的背景,再明白既存應用的需求和傳統數據庫的限制之後,可以更好的分析NoSQL數據庫的優點和缺點。根據NoSQL的特點,總結NoSQL數據庫的數據模型。簡單介紹了CAP理論之後,根據CAP理論對NoSQL數據庫作了一個分類。最後依據數據模型,介紹了當前主流的NoSQL數據庫,客觀的分析了他們長處和缺點,這會更好地幫助用戶選擇使用什麼樣的數據庫系統。然而,NoSQL數據庫也有許多侷限性,在雲計算中使用NoSQL技術的思想也不夠清晰。我們仍然會在這兩個方面加強研究。


[原文] 點擊打開鏈接 

http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6106531

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章