MongoDB、Cassandra 和 HBase 三種 NoSQL 數據庫比較

Hadoop得到了許多大數據應用的信譽,但實際狀況是,NoSQL數據庫是一直處於更加普遍部署和更普遍的發展中的技術。儘管選擇Hadoop做爲應用存儲,相對來講更直接簡單。可是,具體採用什麼樣的NoSQL數據庫是個值得思考的問題,畢竟,還有超過100種的NoSQL數據庫。數據庫

咱們應該選擇哪種?緩存

選擇傾向

「任何像樣規模的企業都會使用各類不一樣類型的數據存儲技術,爲應對各類不一樣類型的數據。」Martin Fowler認爲,現實的狀況是你沒有足夠的精力去學習更多的存儲技術。安全

幸運的是,選擇愈來愈容易,由於市場主要圍繞在三個NoSQL數據庫上:MongoDB,Cassandra(主要由DataStax開發的,誕生於Facebook),和HBase的(和Hadoop緊密關聯在一塊兒,也被相同社區開發出來)。服務器

補充一點,我故意排除Redis。相對於大數據存儲,它主要用於高速內存緩存數據應用。數據結構

從LinkedIn的451研究數據顯示,市場上最具引力的是MongoDB、Cassandra和HBase:架構

這是LinkedIn的我的資料數據。咱們認爲是數據存儲引擎,它經過收集工做、搜索等數據,來了解數據庫的熱門程度。而Oracle,SQL Server和MySQL的佔據了統治地位,MongoDB的(第5位),Cassandra(第9位),和HBase的(第15位)。分佈式

爲了更好解釋爲何這三個數據庫技術的如此耀眼,我問的每個具備表明性的人,以肯定它們成功關鍵因素:Kelly Stirman,MongoDB的產品總監;Patrick McFadin,DataStax的Cassandra首席佈道師;和Justin Kestelyn,Cloudera高級總監。oop

但首先,咱們須要瞭解爲何使用NoSQL的緣由。性能

世界由非結構化數據構成

咱們生活在一個數據愈來愈豐富的世界裏,可是這些數據都不能整齊的展現在一個RDBMS(Relational Database Management System,關係數據庫管理系)的行和列中。移動、社交和雲計算催生了龐大的海量的數據。根據估計,世界上90%的數據是在過去兩年中被創造,以及80%的商業數據是非結構化的。更重要的是,非結構化數據的增加速度是結構化數據的兩倍。學習

隨着世界的變化,數據管理要求開始超越傳統的關係型數據庫的有效範圍。最先關注這個問題解決方案的機構,包括Web技術的先驅、政府機構、從事信息技術服務的公司。

如今愈來愈多,形形色色的公司都但願利用相似的NoSQL和Hadoop做爲替代品:經過NoSQL來創建業務運營應用,以及Hadoop來建立數據挖掘的應用程序,來幫助公司對商業數據提供有力的研究。

 

MongoDB:源於開發人員,爲開發人員服務

在衆多NoSQL的方案中,MongoDB的Stirman指出,MongoDB的瞄準了適合各類應用的平衡的方法。它的功能接近於傳統的關係型數據庫,MongoDB的用戶不只能夠利用其橫向擴展機器的雲基礎架構的優點,而且,由於它可以輕鬆定義各類靈活的數據模型,因此能夠支持不一樣類型的數據集存儲。

MongoDB一般是開發人員第一個嘗試的NoSQL數據庫,由於它是很容易學習。Will Shulman,MongoLab(一個MongoDB服務提供商)的CEO,是這樣說的:

MongoDB中的成功在很大程度上是由於它數據結構存儲的創新,讓咱們更容易和更具表現力地定義咱們應用程序中的數據模型。在一般開發和應用場景中,和原有數據庫具備相同的基本數據模型是有極大好處的,由於它簡化了應用程序開發的任務,另外一方面,消除了複雜的數據格式代碼轉換層。

固然,像任何其餘技術同樣,MongoDB中都有其長處和短處。 MongoDB是專門爲OLTP(On-Line Transaction Processing,聯機事務處理系統)模式。若是您須要複雜的事務處理,它不是一個好的選擇。然而,MongoDB的簡單性使其成爲一個優秀的存儲。

(注:MongoDB以文檔的形式存儲數據,不支持事務和錶鏈接。所以查詢的編寫、理解和優化都容易得多。)

Cassandra:規模化安全運行

三種數據庫中,至少兩種數據庫具備簡單特性:開發簡單,操做簡便。而MongoDB贏得人心的緣由是簡單的開發應用,Cassandra贏得人心是由於易於管理的規模。

DataStax的McFadin告訴我,用戶每每傾向於使用Cassandra ,是由於特別在大規模集羣下,加強一個關係型數據的性能、可靠性是很是困難的。一位前甲骨文DBA,McFadin是興高采烈地發現,「複製和可擴放性是基礎」,Cassandra 特色是從一開始設計就解決這個問題。

在RDBMS中的世界,數據庫功能,拓展和複製對不少開發者用戶來講,是一個難題。這個問題在過往的企業規模小的時候,不是一個大問題。而在今天,它很迅速地成爲大問題。

我從McFadin和其餘人那裏獲知,Cassandra在機器拓展部署上,表現特別出色。Cassandra自帶的備份機制,保證各個數據中心的數據安全。至於增長容量到集羣,「你只需啓動一臺新機器,並告訴Cassandra那裏的新節點,」McFadin說,「而後,它完成其餘剩下的事情。」

優秀的可拓展性,加上出色的寫入和可觀的查詢性能,加起來成爲Cassandra高性能的核心。

NoSQL的一篇文章認爲Cassandra在集羣規模管理方面很是出色,但它須要一個博士學位才能上手。事實並不是如此,McFadin堅持認爲:
在複製、讀取和寫入是故意簡單。你能夠在幾個小時內學會Cassandra的核心功能。在部署這項新技術的時候,爲給開發者帶來不少的信心,由於比較少引入「黑盒子」內的技術細節和複雜的故障模式原理。

這意味着主要的開發成本,是對Cassandra數據模型的理解,以及如何結合您的應用程序。鑑於Cassandra的CQL查詢語言(相似於SQL,實際上不是SQL),McFadin說,學習這個也不困難。

更重要的是,他告訴我,「Cassandra回報給你的是,在一個數據庫中:沒有戲劇性的場景(故障)出現。這就是用戶喜歡使用Cassandra的緣由。」

HBase:Hadoop的知心夥伴

HBase,像Cassandra同樣是個經過key-value面向列存儲的服務。由於它和Hadoop有着「共同血統」,被普遍使用。事實上,正如Cloudera的Kestelyn所說的那樣,「HBase提供了一個基於記錄的存儲層,可以快速隨機讀取和寫入數據,正好彌補了Hadoop的缺陷,Hadoop側重系統吞吐量,而犧牲I / O讀取效率爲代價。」

Kestelyn接着說:

更改有效錄入到內存中,以達到最大的訪問量,同時將數據保存到HDFS。這種設計使基於Hadoop的EDH(enterprise data hub,企業數據中心)服務,可以實時完成隨機讀寫存儲數據,但仍擁有HDFS的高容錯性和耐用性。

Hadoop的親和力,不是HBase數據庫中的人氣排名不斷上升的惟一緣由。相似Cassandra,HBase是Google的Bigtable的開源實現轉化成的數據庫,自然被設計爲高可擴展性。

Hbase能夠利用任何數量服務器的磁盤、內存和CPU資源,同時擁有極佳的擴展功能,如自動分片。當系統負載和性能要求不斷增長,HBase的可經過簡單增長服務器節點的方式無限拓展。 HBase從底層設計上保證,在確保數據一致性的同時,提供最佳性能。

但規模不是它的惟一用途。Kestelyn指出,「因爲它與Hadoop的生態系統緊密集成,對於用戶和應用程序來講,數據是容易獲取的,能夠經過SQL的方式查詢(使用Cloudera的Impala,Phoenix,或Hive),甚至自由文本搜索(使用Cloudera Search)。「所以,HBase爲開發人員提供了一種方法,利用現有通用的SQL語言,來創建在一個更成熟的分佈式數據庫。

每種數據庫技術都有本身的長處和不足,但這裏評論的三種數據庫,在大數據技術領域,佔據了重要的位置。雖然將來可能還有一種全新的NoSQL數據庫技術會挑戰它們前三的位置,但目前的現實是,許多開發人員以及一批強大的成熟企業已經作出了它們的選擇:MongoDB、Cassandra 和 HBase。

 

相關文章
相關標籤/搜索