通過了至少4年的激烈爭論,如今是對NoSQL的現狀作一個階段性結論的時候了。圍繞着NoSQL發生瞭如此之多的事情,以致於很難對其做出一個簡單歸納,也很難判斷它達到了什麼目標以及在什麼方面沒有達到預期。html
在不少領域,NoSQL不只在行業內也在學術領域中取得了成功。大學開始認識到NoSQL必需要加入到課程中。只是反覆講解標準數據庫已經不夠了。固然,這不意味着深刻學習關係型數據庫是錯誤的。相反,NoSQL是很好的很重要的補充。sql
發生了什麼?數據庫
NoSQL領域在短短的4到5年的時間裏,爆炸性地產生了50到150個新的數據庫。nosql-database.org列出了150個這樣的數據庫,包括一些像對象數據庫這樣很古老但很強大的。固然,一些有意思的合併正在發生,如CouchDB和Membase交易產生的CouchBase。可是咱們稍後會在本文中討論每個主要的系統。編程
不少人都曾經假設在NoSQL領域會有一個巨大地整合。可是這並無發生。NoSQL過去是爆炸性地增加,如今依舊如此。就像計算機科學中的全部領域同樣——如編程語言——如今有愈來愈多的空白領域須要大量的數據庫。這是與互聯網、大數據、傳感器以及未來不少技術的爆炸性增加同步的,這致使了更多的數據以及對它們進行處理的不一樣需求。在過去的四年中,咱們只看到了一個重要的系統離開了舞臺:德國的Graph數據庫Sones。爲數衆多的NoSQL依然快樂地生存着,要麼在開源社區,不用考慮任何的金錢回報,要麼在商業領域。緩存
可見性與金錢?安全
另一個重要的方面就是可見性與行業採用的狀況。在這個方面,咱們能夠看到在傳統的行業中——要保護投資——與新興的行業(主要是初創公司)之間有很大的差異。幾乎全部熱門的基於Web的創業公司如Pinterest和Instagram 都在使用混合式(SQL + NoSQL)的架構,而傳統的行業依然糾結因而否採用NoSQL。可是觀察顯示,愈來愈多這樣的公司正在試圖將它們的一部分數據流用NoSQL方案進行處理並在之後進行分析,這樣的方案包括Hadoop、MongoDB以及Cassandra等。服務器
這同時致使了對具有NoSQL知識的架構師和開發人員的需求持續增加。最近的調查顯示行業中最須要的開發人員技能以下:session
在前十名的技術需求中,有兩個NoSQL數據庫。有一個甚至排在了iOS前面。若是這不是對它的讚賞,那是什麼呢?!架構
可是,跟最初預計相比,對NoSQL的採用變得愈來愈快,愈來愈深刻。在2011年夏天,Oracle曾經發布過一個著名白皮書,它提到NoSQL數據庫感受就像是冰淇淋的風味,可是你不該該過於依附它,由於它不會持續太長時間。可是僅僅在幾個月以後,Oracle就展示了它們將Hadoop集成到大數據設備的方案。甚至,他們創建了本身的NoSQL數據庫,那是對BerkeleyDB的修改。今後以後,全部的廠商在集成Hadoop方面展開了競賽。Microsoft、Sybase、IBM、Greenplum、Pervasive以及不少的公司都已經對它有了緊密的集成。有一個模式隨處可見:不能擊敗它,就擁抱它。nosql
可是,關於NoSQL被普遍採用的另外一個很重要但不被你們關注的重要信號就是NoSQL成爲了一個PaaS標準。藉助於衆多NoSQL數據庫的易安裝和管理,像Redis和MongoDB這樣的數據庫能夠在不少的PaaS服務中看到,如Cloud Foundry、OPENSHIFT、dotCloud、Jelastic等。隨着全部的事情都在往雲上遷移,NoSQL會對傳統的關係型數據庫產生很大的壓力。例如當面臨選擇MySQL/PostGres或MongoDB/Redis時,將會強制人們再三考慮他們的模型、需求以及隨之而來的其餘重要問題。
另一個頗有意思的技術指示器就是ThoughtWorks的技術雷達,即使你可能不徹底贊成它所包含的全部事情,但它總會包含一些有意思的事情。讓咱們看一下他們2012年10月份的技術雷達,如圖1:
圖1:ThoughtWorks技術雷達,2012年10月——平臺
在他們的平臺象限中,列出了5個數據庫:
你會發現它們中至少有四個得到了不少的風險投資。若是你將NoSQL領域的全部風險投資加起來,結果確定是在一億和十億美圓之間!Neo4j就是一個例子,它在一系列的B類資助中獲得了一千一百萬美圓。其餘獲得一千萬到三千萬之間資助的公司是Aerospike、Cloudera、DataStax、MongoDB以及CouchBase等。可是,讓咱們再看一下這個列表:Neo4j、MongoDB、Riak以及CouchBase已經在這個領域超過四年了而且在不斷地證實它們是特定需求的市場領導者。第五名的數據庫——Datomic——是一個使人驚訝的全新數據庫,它是由一個小團隊按照全新的範式編寫的。這必定是很熱門的東西,在後面簡要討論全部數據庫的時候,咱們更更深刻地瞭解它們。
標準
已經有不少人要求NoSQL標準了,但他們沒有看到NoSQL涵蓋了一個範圍如此之大的模型和需求。因此,適用於全部主要領域的統一語言如Wide Column、Key/Value、Document和Graph數據庫確定不會持續很長時間,由於它不可能涵蓋全部的領域。有一些方式,如Spring Data,試圖創建一個統一層,但這取決於讀者來測試這一層在構建多持久化環境時是否是一個飛躍。
大多數的Graph和Document數據庫在它們的領域中已經提出了標準。在Graph數據庫世界,由於它的tinkerpop blueprints、Gremlin、Sparql以及Cypher使得它更爲成功一些。在Document數據庫領域,UnQL和jaql填補了一些位置,儘管前者缺乏現實世界NoSQL數據庫的支持。可是藉助Hadoop的力量,不少項目正在將著名的ETL語言如Pig和Hive使用到其餘NoSQL數據庫中。因此標準世界是高度分裂的,但這只是由於NoSQL是一個範圍很廣的領域。
格局
做爲最好的數據庫格局圖之一,是由451 Group的Matt Aslett在一個報告中給出的。最近,他更新了該圖片從而可以讓咱們能夠更好得深刻理解他所提到的分類。你能夠在下面的圖片中看到,這個格局是高度碎片化和重疊的:
圖2:Matt Aslett(451 Group)給出的數據庫格局
你能夠看到在這個圖片中有多個維度。關係型的以及非關係型的、分析型的以及操做型的、NoSQL類型的以及NewSQL類型的。最後的兩個分類中,對於NoSQL有著名的子分類Key-Value、Document、Graph以及Big Tables,而對於NewSQL有子分類Storage-Engine、Clustering-Sharding、New Database、Cloud Service Solution。這個圖有趣的地方在於,將一個數據放在一個精確的位置變得愈來愈難。每個都在拼命地集成其餘範圍數據庫中的特性。NewSQL系統實現NoSQL的核心特性,而NoSQL愈來愈多地試圖實現「傳統」數據庫的特性如支持SQL或ACID,至少是可配置的持久化機制。
這一切都始於衆多的數據庫都提供與Hadoop進行集成。可是,也有不少其餘的例子,如MarkLogic開始參與JSON浪潮,因此也很難對其進行定位。另外,更多的多模型數據庫開始出現,如ArangoDB、OrientDB和AlechemyDB(如今它是頗有前途的Aerospike DB的一部分)。它們容許在起始的時候只有一個數據庫模型(如document/JSON模型)並在新需求出現的時候添加新的模型(Graph或key-value)。
圖書
另一個證實它開始變得成熟的標誌就是圖書市場。在2010年和2011年兩本德語書出版以後,咱們看到Wiley出版了Shashank Tiwari的書。它的結構很棒而且飽含了深入偉大的看法。在2012年,這個競賽圍繞着兩本書展開。「七週七數據庫」(Seven Databases in Seven Weeks)固然是一本傑做。它的特色在於新穎的編寫以及實用的基於親身體驗的看法:它選取了6種著名的NoSQL數據庫以及PostGreSQL。這些都使得它成爲一本高度推薦的圖書。另外一方面,P.J. Sandalage以及Martin Fowler採起了一種更爲全面的方法,涵蓋了全部的特徵並幫助你評估採用NoSQL的路徑和決策。
可是,會有更多的書出現。Manning的書出如今市場上只是個時間問題:Dan McCreary和Ann Kelly正在編寫一本名爲「Making Sense of NoSQL」的書,首期的MEAP(指的是Manning Early Access Program——譯者注)章節已經能夠看到了。
在介紹完理念和模式後,他們的第三章看起來保證頗有吸引力:
只是一個全新的方式,絕對值得一讀。
領導者的現狀
讓咱們快速瞭解一下各個NoSQL的領導者。做爲市場上很明顯的領導者之一,Hadoop是一個很奇怪的動物(做者使用這個詞,多是由於Hadoop的標識是一隻大象——譯者注)。一方面,它擁有巨大的發展勢頭。正如前面所說,每一個傳統的數據庫提供商都急切地聲明支持Hadoop。像Cloudera和MapR這樣的公司會持續增加而且新的Hadoop擴展和繼承者每週都在出現。
即使是Hive和Pig也在更好地獲得接受。不過,有一個美中不足之處:公司們依然在抱怨非結構化的混亂(讀取和解析文件本應該更快一些),MapReduce在批處理上作的還不夠(甚至Google已經捨棄了它),管理依舊很困難,穩定性問題以及在本地很難找到培訓/諮詢。即使你能夠解決一些上面的問題,若是Hadoop繼續像如今這樣發展或發生重大變化的話,它依然會是熱點問題。
第二位領導者,MongoDB,一樣面臨激烈的爭論。處於領導地位的數據庫會得到更多的批評,這多是很天然的事情。不過,MongoDB經歷了快速的增加,它受到的批評主要以下:
a)就老版本而言或者
b)缺乏怎樣正確使用它的知識。儘管MongoDB在下載區域清楚地代表32位版本不能處理2GB的數據並建議使用64位版本,但這依然受到了不少近乎荒謬的抱怨。
無論怎樣,MongoDB合做者和資助者推進了雄心勃勃的發展路線,包含了不少熱門的東西:
尤爲是最後一點吸引了不少架構師的興趣。MongoDB常常被抱怨(同時也被競爭對手)沒有實現簡潔一致的哈希,由於key很容易定義因此不能保證徹底正確。但在未來,將會有一個對hash分片鍵的配置。這意味着用戶能夠決定使用hash key來分片,仍是須要使用本身選擇分片key所帶來的優點(可能不多)。
Cassandra是這個領域中的另外一個產品,它作的很好而且添加了更多更好的特性,如更好的查詢。可是不斷有傳言說運行Cassandra集羣並不容易,須要一些很艱難的工做。但這裏最吸引人的確定是DataStax。Cassandra的新公司——得到了兩千五百萬美圓的C類資助——極可能要處理分析和一些操做方面的問題。尤爲是分析能力使得不少人感到驚訝,由於早期的Cassandra並無被視爲強大的查詢機器。可是這種現狀在最近的幾個版本中發生了變化,查詢功能對一些現代分析來說已經足夠了。
Redis的開發進度也值得關注。儘管Salvatore聲明若是沒有社區和Pieter Noordhuis的幫助,他作不成任何的事情,可是它依舊是至關棒的一個產品。對故障恢復的良好支持以及使用Lua的服務器端腳本語言是其最近的成就。使用Lua的決策對社區帶來了一些震動,由於每一個人都在集成JavaScript做爲服務器端的語言。可是,Lua是一個整潔的語言併爲Redis開啓新的潘多拉盒子帶來了可能性。
CouchBase在可擴展性和其餘潛在因素方面看起來也是一個很好的選擇,儘管Facebook以及Zynga面臨着巨大的風波。它確實不是很熱門的查詢機器,但若是他們可以在未來提升查詢能力,那它的功能就會至關完整了。與CouchDB創立者的合併毫無疑問是很重要的一個步驟,CouchDB在CouchBase裏面的影響值得關注。在每一個關於數據庫的會議上,聽到這樣的討論也是頗有意思的,那就是在Damien、Chris和Jan離開後,CouchDB會變得更好呢仍是更壞呢?你們在這裏只能聽到極端的觀點。可是,只要數據庫作得好誰關心這個呢。如今看起來,它確實作的很好。
最後一個須要說起的NoSQL數據庫固然是Riak,在功能性和監控方面它也有了巨大的提高。在穩定性方面,它繼續獲得巨大的聲譽:「像巨石通常穩定可靠且不顯眼,並對你的睡眠有好處」。Riak CS fork在這種技術的模塊化方面看起來也頗有趣。
有意思的新加入者
除了市場領導者,評估新的加入者一般是頗有意思的。讓咱們深刻了解它們中的一部分。
毫無疑問,Elastic Search是最熱門的新NoSQL產品,在一系列的A輪資助中它剛剛得到了一千萬美圓,這是它熱門的一個明證。做爲構建在Lucene之上的高擴展性搜索引擎,它有不少的優點:a)它有一個公司提供服務而且b)利用了Lucene在過去的多年中已被充分證實的成就。它確定會比以往更加深刻得滲透到整個行業中,並在半結構化信息領域給重要的參與者帶來衝擊。
Google在這個領域也推出了小巧可是迅速的LevelDB。在不少特殊的需求下,如壓縮集成方面,它做爲基礎獲得了不少的應用。即便是Riak都集成了LevelDB。考慮到Google的新數據庫如Dremel和Spanner都有了對應的開源項目(如Apache Drill或Cloudera Impala),它依然被視爲會繼續存在的。
另一個技術變化固然就是在2012年初的DynamoDB。自從部署在Amazon中,他們將其視爲增加最快的服務。它的可擴展性很強。新特性開發地比較慢但它關注於SSD,其潛力是很使人振奮的。
多模塊數據庫也是值得關注的一個領域。最著名的表明者是OrientDB,它如今並非新的加入者但它在很迅速地提升功能。可能它變化得太快了,不少使用者也許會很開心地看到OrientDB已經到達了1.0版本,但願它能更穩定一些。對Graph、Document、Key-Value的支持以及對事務和SQL的支持,使得咱們有理由給它第二次表現的機會。尤爲是對SQL的良好支持使得它對諸如Penthao這樣的分析解決方案方面頗有吸引力。這個領域另外一個新的加入者是ArangoDB,它的進展很快,並不畏懼將本身與已肯定地位的參與者進行比較。
可是,若是有新的需求必需要實現而且具備不一樣類型的新數據模型要進行持久化的話,對原生JSON和Graph的支持會省去不少的努力。
到目前位置,2012年的最大驚喜來自於Datomic。它由一些搖滾明星採用Clojure語言以難以使人置信的速度開發的,它發佈了一些新的範式。另外,它還進入了ThoughtWorks的技術雷達,佔據了推薦關注的位置。儘管它「只是」已有數據庫中一個參與者,可是它有不少的優點,如:
目前,支持將DynamoDB、Riak、CouchBase、Infinispan以及SQL做爲底層的存儲引擎。它甚至容許你同時混合和查詢不一樣的數據庫。不少有經驗的人都很驚訝於這種顛覆性的範式轉變是如何可能實現的。但幸運的是它就是這樣。
總結
做爲總結,咱們作出三點結論:
可是隨着衆多的數據庫嘗試實現全部的特性,明確的邊界消失了
肯定使用哪一種數據庫比之前更爲複雜了。
你必需要知道50個用例、50個數據庫並要回答至少50個問題。關於後者,筆者在過去兩年多的NoSQL諮詢中進行了收集,能夠在如下地址找到:選擇正確的數據庫,在NoSQL和NewSQL間進行選擇。