呂美英,郭顯娥
(山西大同大學數學與計算機科學學院,山西大同 037009)
NOSQL和可擴展的SQL
呂美英,郭顯娥
(山西大同大學數學與計算機科學學院,山西大同 037009)
隨著互聯網的發展,數據規模的不斷擴大,對訪問量,訪問速度的越來越高的要求,NoSQL作為一種數據存儲方式,得到越來越廣泛的關注和應用,對傳統的占據數據庫市場主導地位近三十年的SQL數據庫,也就是關系型數據庫提出了極大的挑戰。本文對現有的NoSQL數據存儲技術的數據模型,技術發展和應用,以及SQL數據庫發展的趨勢和現狀進行了綜述,提出SQL和NoSQL在數據庫市場中會根據系統的要求,主要是多版本并發控制,擴展性,一致性和速度要求等的不同而劃分數據庫市場。
NoSQL;可擴展的SQL;網絡數據庫
計算機應用離不開數據的管理和處理。數據的處理經歷了三個階段:手工管理、文件管理和數據庫管理。數據庫管理數據,使得大型的計算機應用成為可能。數據庫技術始于上世紀60年代,隨后發展迅速。盡管NoSQL數據庫如層次數據庫,圖形數據庫,和面向對象的數據庫在60年代末就開發出來了[1],但是以SQL為主要的數據查詢和操縱語言的關系數據庫從上個世紀80年代起,成為了數據庫技術的主流產品。關系數據庫具有四個特性:ACID,即原子性,一致性,隔離性和持續性,且建立在嚴格的集合代數基礎之上,有強大的查詢功能。但是關系數據庫也有致命的弱點,那就是數據結構規整,容錯性和擴展性差,在分布式數據庫和數據分片的情形下處理能力差,海量數據訪問處理速度慢等。隨著應用數據規模的擴大和互聯網的發展,這些缺陷就變得不能容忍。為此,一些新型的易于橫向擴展的NoSQL數據系統應運而生,如健值存儲數據庫,文檔存儲數據庫,RDF(資源描述框架)數據庫,大表數據庫等。它們不再以SQL作為主要的查詢語言,其優點是易于擴展,大規模海量數據處理速度快,容錯性高,但同時這些系統在數據一致性上也大打折扣,不過,這并不對他們的使用造成太大的影響。很多大型的互聯網網站都使用這種類型數據存儲方式,如AMAZON的DYNAMO[2]和LINKEDIN使用的開源VOLDEMORT,GOOLGE的BIGTABLE[3]和FACEBOOK的CASSANDRA[4]等。與此同時,關系數據庫本身也在發展,產生了可擴展的關系數據庫,即SCALABLE SQL,一些大型的社交網站如FACEBOOK,MYSPACE,TWITTER和一些商務和銀行系統,其核心的數據存儲仍是基于SQL的[5]。本文討論了一些可擴展的SQL和一些NoSQL數據存儲系統的特點和不足,對它們未來的發展做出了展望。
NoSQL,意味著不僅僅SQL,或者不僅僅非關系型數據存儲。在關系數據庫作為主流的時代,非關系型的數據庫大都加上了SQL支持,如面向對象的數據庫發展為關系對象數據庫,XML數據庫也受到了SQL2003的擴展支持[6]。但是隨著互聯網技術的發展和由之產生的海量、分布式、分片數據存儲和訪問,NoSQL數據存儲異軍突起,成為了當今絕大多數互聯網公司的主流。連當今世界最大的關系數據庫公司ORACLE也推出了自己的NoSQL解決方案[7-8]。下面,我們對NoSQL的數據模型作一概括:
1.1 Key-Value(鍵值)存儲模型
Key-Value模型由鍵和其相應的值組成,是結構最簡單,使用最方便的NoSQL數據模型。它支持簡單的key(鍵)對value(值)的存儲和提取,這能夠滿足絕大多數網絡平臺數據存儲的需要。Key-Value模型通常是由HashTable實現的,所以無法進行范圍查詢,因而其后就出現了有序的Key-Value模型。有序Key-Value可以支持范圍查詢。雖然有序Key-Value模型能夠解決范圍查詢的問題,但是其Value(值)依然是無結構的二進制碼或純字符串,通常我們只能在應用層去解析相應的結構。使用鍵值存儲的NoSQL非常多,有Dynamo,Openlink的Virtuoso,Oracle Coherence,LevelDB,Memcache DB,Redis,Kyoto Cabinet,Berkeley DB,IBM的InformixC-ISAM等。
1.2 類BigTable(也稱為Extensible-record,或wide-column stores)的數據模型
此種數據存儲能夠支持結構化和半結構化的數據,包括列,列簇,時間戳以及版本控制等元數據的存儲,其基本的數據模型是行和列,而且行和列可以在多個節點上同時進行水平和垂直的擴展分割。行以主碼按范圍而非HASH來分片,因而一定范圍內的查詢,就不需要遍歷各個節點。列則以列簇的方式分散在多個節點上,用戶可以決定那些列放在一起最方便。流行的開源的Apache HBase,Apache Cassandra都屬此類,此外,還有Hypertable,Accumulo,SimpleDB等都是這種數據庫。
1.3 文檔型存儲
文檔是以XML,YAML,JSON,BSON等形式以及一些二進制形式如PDF和MS Word,Excel等被編碼和封裝的,文檔型存儲沒有模式,最早始于Lotus Notes.MongoDB,CouchDB都是在Lotus的基礎上發展起來的[9]。文檔型存儲相對到類BigTable存儲又有兩個大的提升。一是其Value(值)支持復雜的結構定義,二是支持數據庫索引的定義。除了支持主碼數據訪問外,文檔型存儲可以通過索引來快速訪問記錄的屬性。因為所有的數據都在一個文檔內,因而不需要數據連接和多對象事務處理,這使得數據的集群化更為容易,擴展性能更強[10]。全文索引模型是文檔型存儲的一個變種。它們的區別在于文檔型存儲的索引主要是按照字段名來組織的,而全文索引模型是按字段的具體值來組織的。支持全文索引的NoSQL包括:Apache Lucene,Apache Solr。
1.4 圖數據庫模型
也可以看作是從Key-Value模型發展出來的一個分支,不同的是它的數據之間有著廣泛的關聯,并且這種模型支持一些圖結構的算法,以節點和邊(關系)模式進行存儲,非常適合社交網絡使用,如Neo4j,FlockDB等。
NoSQL與關系型數據庫的差別,簡單總結如下:
(1)NoSQL數據庫的數據模型通常與實際需求更貼近,沒有固定的格式,可以靈活插入數據和新的屬性。
(2)使用NoSQL數據模型,通常需要對存儲的內部結構和實現算法有一定的了解。
(3)使用NoSQL數據庫,通常要自己處理數據結構解析和數據的冗余復制問題。
(4)對于關系型數據庫來說,對數據分級存儲的處理并不強。但是對圖數據庫,或者說其它的NoSQL數據庫來說,對數據的分級處理都是預先考慮的。
(5)NoSQL通常部署在多臺服務器上,并對數據進行分片和復制,這和部署在多臺服務器上的SQL不一樣,它們不依賴互相復制來保持同步,因而數據的一致性通常都較SQL差。
由此,我們不難看出,盡管很多的NoSQL數據存儲都有簡單的查詢平臺可供編程和使用,但是大多為一次一記錄的方式[11],而且使用不同的編程語言去訪問數據[12],比成熟的SQL數據庫,即非過程化的一次一集合的關系數據庫來說,操控要難的多。
在互聯網技術的發展中,由之產生的海量、分布式、分片數據存儲和訪問,給傳統的SQL數據庫帶來了沖擊和挑戰。在此背景下,基于改善關系數據庫的擴展性的產品和技術就產生了。其實,絕大多數的關系數據庫都具有一定的擴展性,如ORACLE的RAC。但是這并不能滿足WEB環境下的應用。如TWITTER在使用NoSAL CASSANDRA的同時,其核心的數據系統依然是MYSQL,但是在MYSQL上增添了新的功能,使其能滿足擴展性的要求;VMware的SQL Fire可以建造在SQL關系數據庫上,使其具有擴展性,是能管理數據備份和分區表的云端產品。此外還有開源的作為MySQL一部分的MySQL Cluster,高性能可擴展的運行在分布式服務器RAM上的關系數據庫VoltDB,可擴展到上百個節點,具有自動切片和備份功能且支持所有ACID特性的Clustrix,使用多服務器集群實現其擴展性的ScaleDB,建立在 MySQL上的可對多個單節點MySQL數據庫進行表切片,并自帶部分SQL語法分析器的ScaleBase,使用MVCC(多版本并發控制)和分布式對象存儲的NimbusDB等等[13]。這些可擴展的SQL數據庫的共同特點就是在傳統的SQL數據庫上,加上一些軟件,使傳統的SQL數據庫在滿足傳統的ACID特性的基礎上,能應用在多并發,高訪問率的網絡上。這是SQL數據庫發展的一個重要的特點。
NoSQL數據存儲的流行,不會很快就消失。NoSQL數據存儲系統的簡單,靈活,和優異的擴展性,使其在網絡系統這一市場上獨占鰲頭,這一市場的特點是,具有成千上萬的用戶讀寫應用和相對簡單的數據模式。盡管關系數據庫的擴展性得到了改善,盡管NoSQL數據存儲的穩定性,可靠性還有待于進一步驗證和改善,但是它仍將在網絡應用中獨具優勢。ERIK MEIJER和GAVIN BIERMAN提出了大多數的鍵值型的NoSQL數據存儲的數據模型為類似于SQL的參照外碼和主碼的SQL模型的CoSQL,即雙SQL模型,稱鍵值型NoSQL就是CoSQL(Dual SQL)[14]。就像關系數據庫建立在由E.F.Codd提出的集合代數基礎上一樣,他們提出了一個基于集合的Monads的關系代數理論,這就使得適用于鍵值型NoSQL和SQL兩種數據庫的共同的查詢語言成為可能,而這可能會改變NoSQL市場的格局,使其由進入推出門檻低,很多的小供應商提供差異化的,實現技術不同的多樣化產品的壟斷市場向和關系數據庫相類似的獨占型市場轉化。眾所周知,關系數據庫市場中,只有少數的競爭對手,如Oracle,IBM,Microsoft,MySQL等。
GOOGLE在BIGTABLE上建了MEGASTORE,使得其NoSQL的BIGTABLE在很多方面都類似于一個可擴展的關系數據庫[15],它具有和SQL非常接近的數據庫語言,支持層次化的訪問路徑和有限的數據連接。2011年四月,Citrusleaf發布了適用于廣告市場實時投標的新的數據庫技術Citrusleaf 2.0。Citrusleaf 2.0是一個鍵值存儲的NoSQL實時數據庫,具高可靠性,線性可擴展性,在大容量,數據密度大的網絡和移動環境中性能卓越,但是它能提供SQL數據庫所具有的ACID性能。Quest Software Inc.發布了支持Hapood的Apache Hive的開源NoSQL工具Toad。適用于云數據庫的Toad為NoSQL數據庫的Hive系統提供了一個用戶友好的SQL接口,方便開發者用SQL來查詢數據,遷移和更新非關系數據。此系統也支持Apache Hbase,Amazon SimpleDB,Miscroft Azure,Apache Cassandra,以及所有的ODBC關系數據庫。上面我們已經介紹了很多可擴展性的關系數據庫。由此可以看出NoSQL和SQL數據存儲之間的差距在縮小:NoSQL趨于提供一個統一的SQL接口,而SQL則致力于能夠用于多節點的可分片的數據存儲中,同時不失其ACID特性。
CAP理論認為在網絡數據共享的系統中,數據只能滿足一致性(consistency),高可用性(high availability)和分區容忍性(partition tolerance)中的兩個性能。University Berkeley的Eric Brewer認為,CAP實際上僅僅在數據庫的設計中設下了一個很小的限制,即完美的可用性和一致性在分區的存在下是非常少見的[16]。可擴展的SQL和NoSQL上SQL層的建立,就是在數據庫的分區容忍性的基礎上,保持了包括一致性在內的ACID特性。盡管如此,NoSQL和SQL依然是在各自的應用領域內具有不可替代性。
[1]Leavitt,Nea.Will NoSQUL Databases Live Up to Their Promise Computer[J].2010,43(2):12-14.
[2]Giuseppe DeCandia.Dynamo:Amazon's Highly Available Key-value Store.21st ACM Symposium on Operating Systems Principles[C].Stevenson,WA,2007.
[3]Fay Chang.Bigtable:A Distributed Storage System for Structured Data,Seventh Symposium on Operating System Design and Implementation[C].Seattle,WA,2006.
[4]Charles Babcock.Cassandra Scores Big Wins For′NoSQL′Team[J].Informationweek,2010(1259):16.
[5]Michael Rys.How do large-scale sites and applications remain SQL-based?[J].Communications of the ACM,2011,54(6):48-53.
[6]王珊,薩師煊.數據庫系統概論[M].北京:高等教育出版社,2006.
[7]Brooks,Jason.Oracle Gives NoSQL Market a Boost[J].E Week,2011,28(17):8.
[8]Guy Harrison.Oracle Joins the NoSQL Movement[J].Database Trends and Applications,2011(12):31.
[9]Guy Harrison.NoSQL and Document-Oriented Databases[J].Database Trends and Applications,2010(12):32.
[10]Eelco Plugge.The Definitive Guide to MongoDB:The NoSQL Database for Cloud and Desktop Computing[M].New York:Springer-Verlag,2010.
[11]Michael Stonebraker.SQL Databases v.s.NoSQL Databases[J].Communications of the Acm,2010,53(4):10-11.
[12]Jason Brooks.Does NoSQL Matter to Your Company?[J].EWeek,2011(19):18-19.
[13]Rick Cattell.Scalable SQL and NoSQL Data Stores[J].ACM SIGMOD Record,2010,39(4):12-27.
[14]Erik Meijer,Gavin Bierman.A Co-Relational Model of Data for Large Shared Data Banks[J].Communication of the ACM,2011,54(4):49-58.
[15]Rick Cattell.Scalable SQL and NoSQL Data Stores,ACM SIGMOD Record[J],2010,39(4):12-27.
[16]Eric Brewer.CAP Twelve Years Later:How the“Rules”Have Changed[J].Computer,2012(2):23-29.
〔責任編輯 高海〕
NOSQL and Scalable SQL
LU Mei-ying,GUO Xian-er
(School of Mathematics and Computer Science,Shanxi Datong University,Datong Shanxi,037009)
With the development of web-bases applications,the users create huge quantities of data.Yet they demand high speed accessibility despite of the fast growing traffic.NoSQL databases have
a great deal of attention and are adopted by some famous web-based companies,which challenges greatly the traditional SQL databases,the relation database systems that dominate the database market in the past thirty years.This paper reviews the data model,technical development and application of the NoSQL databases,and the trend of a number of SQL databases.It states that SQL and NoSQL each has its own application niches and is used based on the system requirements,mainly,multi-version concurrency control,scalability,consistency,and speed tolerance,etc.
NoSQL,Scalable SQL,Web-based Data Store
O175.12
A
1674-0874(2012)05-0015-04
2012-03-15
呂美英(1967-),女,山西大同人,碩士,工程師,研究方向:數據庫原理與應用。