NoSQL的現狀

發表於2013-02-27

譯文來源:InfoQ 張衛濱

經過了至少4年的激烈爭論,現在是對NoSQL的現狀做一個階段性結論的時候了。圍繞著NoSQL發生瞭如此之多的事情,以至於很難對其作出一個簡單概括,也很難判斷它達到了什麼目標以及在什麼方面沒有達到預期。

在很多領域,NoSQL不僅在行業內也在學術領域中取得了成功。大學開始認識到NoSQL必須要加入到課程中。只是反覆講解標準資料庫已經不夠了。當然,這不意味著深入學習關係型資料庫是錯誤的。相反,NoSQL是很好的很重要的補充。

發生了什麼?

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知識的架構師和開發人員的需求持續增長。最近的調查顯示行業中最需要的開發人員技能如下:

  1. HTML5
  2. MongoDB
  3. iOS
  4. Android
  5. Mobile Apps
  6. Puppet
  7. Hadoop
  8. jQuery
  9. PaaS
  10. Social Media

在前十名的技術需求中,有兩個NoSQL資料庫。有一個甚至排在了iOS前面。如果這不是對它的讚揚,那是什麼呢?!

但是,跟最初預計相比,對NoSQL的採用變得越來越快,越來越深入。在2011年夏天,Oracle曾經發布過一個著名白皮書,它提到NoSQL資料庫感覺就像是冰淇淋的風味,但是你不應該過於依附它,因為它不會持續太長時間。但是僅僅在幾個月之後,Oracle就展現了它們將Hadoop整合到大資料裝置的方案。甚至,他們建立了自己的NoSQL資料庫,那是對BerkeleyDB的修改。從此之後,所有的廠商在整合Hadoop方面展開了競賽。Microsoft、Sybase、IBM、Greenplum、Pervasive以及很多的公司都已經對它有了緊密的整合。有一個模式隨處可見:不能擊敗它,就擁抱它。

但是,關於NoSQL被廣泛採用的另一個很重要但不被大家關注的重要訊號就是NoSQL成為了一個PaaS標準。藉助於眾多NoSQL資料庫的易安裝和管理,像Redis和MongoDB這樣的資料庫可以在很多的PaaS服務中看到,如Cloud Foundry、OPENSHIFT、dotCloud、Jelastic等。隨著所有的事情都在往雲上遷移,NoSQL會對傳統的關係型資料庫產生很大的壓力。例如當面臨選擇MySQL/PostGres或MongoDB/Redis時,將會強制人們再三考慮他們的模型、需求以及隨之而來的其他重要問題。

另外一個很有意思的技術指示器就是ThoughtWorks的技術雷達,即便你可能不完全同意它所包含的所有事情,但它總會包含一些有意思的事情。讓我們看一下他們2012年10月份的技術雷達,如圖1:

NoSQL的現狀

圖1:ThoughtWorks技術雷達,2012年10月——平臺

在他們的平臺象限中,列出了5個資料庫:

  1. Neo4j (採用)
  2. MongoDB(試用階段但是採用)
  3. Riak(試用)
  4. CouchBase(試用)
  5. Datomic(評估)

你會發現它們中至少有四個獲得了很多的風險投資。如果你將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在一個報告中給出的。最近,他更新了該圖片從而能夠讓我們可以更好得深入理解他所提到的分類。你可以在下面的圖片中看到,這個格局是高度碎片化和重疊的:

NoSQL的現狀

圖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大資料解決方案
  • 構建NoSQL搜尋解決方案
  • 構建NoSQL高可用性解決方案
  • 使用NoSQL來提高敏捷性

只是一個全新的方式,絕對值得一讀。

領導者的現狀

讓我們快速瞭解一下各個NoSQL的領導者。作為市場上很明顯的領導者之一,Hadoop是一個很奇怪的動物(作者使用這個詞,可能是因為Hadoop的標識是一隻大象——譯者注)。一方面,它擁有巨大的發展勢頭。正如前面所說,每個傳統的資料庫提供商都急切地宣告支援Hadoop。像Cloudera和MapR這樣的公司會持續增長並且新的Hadoop擴充套件和繼承者每週都在出現。
即便是Hive和Pig也在更好地得到接受。不過,有一個美中不足之處:公司們依然在抱怨非結構化的混亂(讀取和解析檔案本應該更快一些),MapReduce在批處理上做的還不夠(甚至Google已經捨棄了它),管理依舊很困難,穩定性問題以及在本地很難找到培訓/諮詢。即便你可以解決一些上面的問題,如果Hadoop繼續像現在這樣發展或發生重大變化的話,它依然會是熱點問題。

第二位領導者,MongoDB,同樣面臨激烈的爭論。處於領導地位的資料庫會獲得更多的批評,這可能是很自然的事情。不過,MongoDB經歷了快速的增長,它受到的批評主要如下:

a)就老版本而言或者
b)缺少怎樣正確使用它的知識。儘管MongoDB在下載區域清楚地表明32位版本不能處理2GB的資料並建議使用64位版本,但這依然受到了很多近乎荒謬的抱怨。

不管怎樣,MongoDB合作者和資助者推動了雄心勃勃的發展路線,包含了很多熱門的東西:

  • 行業需要的一些安全性/LDAP特性,目前正在開發
  • 全文字搜尋很快會推出
  • 針對MapReduce的V8將會推出
  • 將會出現比集合級別更好的鎖級別
  • Hash分片鍵正在開發中

尤其是最後一點吸引了很多架構師的興趣。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作為底層的儲存引擎。它甚至允許你同時混合和查詢不同的資料庫。很多有經驗的人都很驚訝於這種顛覆性的正規化轉變是如何可能實現的。但幸運的是它就是這樣。

總結

作為總結,我們做出三點結論:

  1. 關於CAP理論,Eric Brewer的一些新文章應該幾年前就發表。在這篇文章中這篇佳文的中文版地址——譯者注),他指出“三選二”具有誤導性,並指出了它的原因,世界為何遠比簡單的CP/AP更為複雜,如在ACID/BASE之間做出選擇。雖然如此,近些年來有成千上萬的對話和文章繼續讚揚CAP理論而沒有任何批評性的反思。Michael Stonebraker是NoSQL最強有力的審查者之一(NoSQL領域也對他頗多感激),他在多年前就指出了這些問題!遺憾的是,沒有多少人在聽。但是,既然Eric Brewer更新了他的理論,簡單的CAP敘述時代肯定要結束了。在指出CAP理論的真實和多樣性的觀點上,請站在時代的前列。
  2. 正如我們所瞭解的那樣,傳統關係型資料庫的不足導致了NoSQL領域的產生。但這也是傳統帝國發起回擊的時刻。在“NewSQL”這個術語之下,我們可以看到許多新的引擎(如database.com、VoltDB、GenieDB等,見圖2),它們提高了傳統的解決方案、分片以及雲端計算方案的能力。這要感謝NoSQL運動。

    但是隨著眾多的資料庫嘗試實現所有的特性,明確的邊界消失了
    確定使用哪種資料庫比以前更為複雜了。
    你必須要知道50個用例、50個資料庫並要回答至少50個問題。關於後者,筆者在過去兩年多的NoSQL諮詢中進行了收集,可以在以下地址找到:選擇正確的資料庫在NoSQL和NewSQL間進行選擇

  3. 一個通用的真理就是,每一項技術的變化——從客戶端-服務端技術開始甚至更早——需要十倍的成本才能進行轉移。例如,從大型機到客戶端-服務端、客戶端-服務端到SOA、SOA到WEB、RDBMS到混合型持久化之間的轉換都是如此。所以可以推斷出,在將NoSQL加入到他們的產品決策上,很多的公司在遲疑和糾結。但是,大家也都知道,最先採用的公司會從這個兩個領域獲益並且能夠快速整合NoSQL,所以在將來會佔據更有利的位置。就這一點而言,NoSQL解決方案會一直存在並且評估起來會是有利可圖的領域。

相關文章