Hadoop獲得了許多大數(shù)據(jù)應用的信譽,但實際情況是,NoSQL數(shù)據(jù)庫是一直處于更加廣泛部署和更廣泛的發(fā)展中的技術。盡管選擇Hadoop作為應用存儲,相對來說更直接簡單。但是,具體采用什么樣的NoSQL數(shù)據(jù)庫是個值得思考的問題,畢竟,還有超過100種的NoSQL數(shù)據(jù)庫。
我們應該選擇哪一種?
選擇傾向
“任何像樣規(guī)模的企業(yè)都會使用各種不同類型的數(shù)據(jù)存儲技術,為應對各種不同類型的數(shù)據(jù)?!盡artin Fowler認為,現(xiàn)實的情況是你沒有足夠的精力去學習更多的存儲技術。
幸運的是,選擇越來越容易,因為市場主要圍繞在三個NoSQL數(shù)據(jù)庫上:MongoDB,Cassandra(主要由DataStax開發(fā)的,誕生于Facebook),和HBase的(和Hadoop緊密關聯(lián)在一起,也被相同社區(qū)開發(fā)出來)。
補充一點,我故意排除Redis。相對于大數(shù)據(jù)存儲,它主要用于高速內(nèi)存緩存數(shù)據(jù)應用。
從LinkedIn的451研究數(shù)據(jù)顯示,市場上最具引力的是MongoDB、Cassandra和HBase:

這是LinkedIn的個人資料數(shù)據(jù)。我們認為是數(shù)據(jù)存儲引擎,它通過收集工作、搜索等數(shù)據(jù),來了解數(shù)據(jù)庫的熱門程度。而Oracle,SQL Server和MySQL的占據(jù)了統(tǒng)治地位,MongoDB的(第5位),Cassandra(第9位),和HBase的(第15位)。
為了更好解釋為什么這三個數(shù)據(jù)庫技術的如此耀眼,我問的每一個具有代表性的人,以確定它們成功關鍵因素:Kelly Stirman,MongoDB的產(chǎn)品總監(jiān);Patrick McFadin,DataStax的Cassandra首席布道師;和Justin Kestelyn,Cloudera高級總監(jiān)。
但首先,我們需要了解為什么使用NoSQL的原因。
世界由非結(jié)構化數(shù)據(jù)構成
我們生活在一個數(shù)據(jù)越來越豐富的世界里,但是這些數(shù)據(jù)都不能整齊的展示在一個RDBMS(Relational Database Management System,關系數(shù)據(jù)庫管理系)的行和列中。移動、社交和云計算催生了龐大的海量的數(shù)據(jù)。根據(jù)估計,世界上90%的數(shù)據(jù)是在過去兩年中被創(chuàng)造,以及80%的商業(yè)數(shù)據(jù)是非結(jié)構化的。更重要的是,非結(jié)構化數(shù)據(jù)的增長速度是結(jié)構化數(shù)據(jù)的兩倍。
隨著世界的變化,數(shù)據(jù)管理要求開始超越傳統(tǒng)的關系型數(shù)據(jù)庫的有效范圍。最早關注這個問題解決方案的機構,包括Web技術的先驅(qū)、政府機構、從事信息技術服務的公司。
現(xiàn)在越來越多,形形色色的公司都希望利用類似的NoSQL和Hadoop作為替代品:通過NoSQL來建立業(yè)務運營應用,以及Hadoop來創(chuàng)建數(shù)據(jù)挖掘的應用程序,來幫助公司對商業(yè)數(shù)據(jù)提供有力的研究。
MongoDB:源于開發(fā)人員,為開發(fā)人員服務
在眾多NoSQL的方案中,MongoDB的Stirman指出,MongoDB的瞄準了適合各種應用的平衡的方法。它的功能接近于傳統(tǒng)的關系型數(shù)據(jù)庫,MongoDB的用戶不僅可以利用其橫向擴展機器的云基礎架構的優(yōu)勢,并且,因為它能夠輕松定義各種靈活的數(shù)據(jù)模型,所以可以支持不同類型的數(shù)據(jù)集存儲。
MongoDB通常是開發(fā)人員第一個嘗試的NoSQL數(shù)據(jù)庫,因為它是很容易學習。Will Shulman,MongoLab(一個MongoDB服務提供商)的CEO,是這樣說的:
MongoDB中的成功在很大程度上是因為它數(shù)據(jù)結(jié)構存儲的創(chuàng)新,讓我們更容易和更具表現(xiàn)力地定義我們應用程序中的數(shù)據(jù)模型。在通常開發(fā)和應用場景中,和原有數(shù)據(jù)庫具有相同的基本數(shù)據(jù)模型是有極大好處的,因為它簡化了應用程序開發(fā)的任務,另一方面,消除了復雜的數(shù)據(jù)格式代碼轉(zhuǎn)換層。
當然,像任何其他技術一樣,MongoDB中都有其長處和短處。 MongoDB是專門為OLTP(On-Line Transaction Processing,聯(lián)機事務處理系統(tǒng))模式。如果您需要復雜的事務處理,它不是一個好的選擇。然而,MongoDB的簡單性使其成為一個優(yōu)秀的存儲。
(注:MongoDB以文檔的形式存儲數(shù)據(jù),不支持事務和表連接。因此查詢的編寫、理解和優(yōu)化都容易得多。)
Cassandra:規(guī)模化安全運行
三種數(shù)據(jù)庫中,至少兩種數(shù)據(jù)庫具有簡單特性:開發(fā)簡單,操作簡便。而MongoDB贏得人心的原因是簡單的開發(fā)應用,Cassandra贏得人心是因為易于管理的規(guī)模。
DataStax的McFadin告訴我,用戶往往傾向于使用Cassandra ,是因為特別在大規(guī)模集群下,增強一個關系型數(shù)據(jù)的性能、可靠性是非常困難的。一位前甲骨文DBA,McFadin是興高采烈地發(fā)現(xiàn),“復制和可擴放性是基礎”,Cassandra 特點是從一開始設計就解決這個問題。
在RDBMS中的世界,數(shù)據(jù)庫功能,拓展和復制對很多開發(fā)者用戶來說,是一個難題。這個問題在過往的企業(yè)規(guī)模小的時候,不是一個大問題。而在今天,它很迅速地成為大問題。
我從McFadin和其他人那里獲知,Cassandra在機器拓展部署上,表現(xiàn)特別出色。Cassandra自帶的備份機制,保證各個數(shù)據(jù)中心的數(shù)據(jù)安全。至于增加容量到集群,“你只需啟動一臺新機器,并告訴Cassandra那里的新節(jié)點,”McFadin說,“然后,它完成其他剩下的事情。”
優(yōu)秀的可拓展性,加上出色的寫入和可觀的查詢性能,加起來成為Cassandra高性能的核心。
NoSQL的一篇文章認為Cassandra在集群規(guī)模管理方面非常出色,但它需要一個博士學位才能上手。事實并非如此,McFadin堅持認為:
在復制、讀取和寫入是故意簡單。你可以在幾個小時內(nèi)學會Cassandra的核心功能。在部署這項新技術的時候,為給開發(fā)者帶來很多的信心,因為比較少引入“黑盒子”內(nèi)的技術細節(jié)和復雜的故障模式原理。
這意味著主要的開發(fā)成本,是對Cassandra數(shù)據(jù)模型的理解,以及如何結(jié)合您的應用程序。鑒于Cassandra的CQL查詢語言(類似于SQL,實際上不是SQL),McFadin說,學習這個也不困難。
更重要的是,他告訴我,“Cassandra回報給你的是,在一個數(shù)據(jù)庫中:沒有戲劇性的場景(故障)出現(xiàn)。這就是用戶喜歡使用Cassandra的原因?!?/p>
HBase:Hadoop的知心伙伴
HBase,像Cassandra一樣是個通過key-value面向列存儲的服務。因為它和Hadoop有著“共同血統(tǒng)”,被廣泛使用。事實上,正如Cloudera的Kestelyn所說的那樣,“HBase提供了一個基于記錄的存儲層,能夠快速隨機讀取和寫入數(shù)據(jù),正好彌補了Hadoop的缺陷,Hadoop側(cè)重系統(tǒng)吞吐量,而犧牲I / O讀取效率為代價?!?/p>
Kestelyn接著說:
更改有效錄入到內(nèi)存中,以達到最大的訪問量,同時將數(shù)據(jù)保存到HDFS。這種設計使基于Hadoop的EDH(enterprise data hub,企業(yè)數(shù)據(jù)中心)服務,能夠?qū)崟r完成隨機讀寫存儲數(shù)據(jù),但仍擁有HDFS的高容錯性和耐用性。
Hadoop的親和力,不是HBase數(shù)據(jù)庫中的人氣排名不斷上升的唯一原因。類似Cassandra,HBase是Google的Bigtable的開源實現(xiàn)轉(zhuǎn)化成的數(shù)據(jù)庫,天然被設計為高可擴展性。
Hbase可以利用任何數(shù)量服務器的磁盤、內(nèi)存和CPU資源,同時擁有極佳的擴展功能,如自動分片。當系統(tǒng)負載和性能要求不斷增加,HBase的可通過簡單增加服務器節(jié)點的方式無限拓展。 HBase從底層設計上保證,在確保數(shù)據(jù)一致性的同時,提供最佳性能。
但規(guī)模不是它的唯一用途。Kestelyn指出,“由于它與Hadoop的生態(tài)系統(tǒng)緊密集成,對于用戶和應用程序來說,數(shù)據(jù)是容易獲取的,可以通過SQL的方式查詢(使用Cloudera的Impala,Phoenix,或Hive),甚至自由文本搜索(使用Cloudera Search)?!耙虼?,HBase為開發(fā)人員提供了一種方法,利用現(xiàn)有通用的SQL語言,來建立在一個更成熟的分布式數(shù)據(jù)庫。
每種數(shù)據(jù)庫技術都有自己的長處和不足,但這里評論的三種數(shù)據(jù)庫,在大數(shù)據(jù)技術領域,占據(jù)了重要的位置。雖然未來可能還有一種全新的NoSQL數(shù)據(jù)庫技術會挑戰(zhàn)它們前三的位置,但目前的現(xiàn)實是,許多開發(fā)人員以及一批強大的成熟企業(yè)已經(jīng)做出了它們的選擇:MongoDB、Cassandra 和 HBase。