MongoDB、Cassandra 和 HBase 三種 NoSQL 資料庫比較

徐漢彬發表於2015-09-24

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高階總監。

但首先,我們需要了解為什麼使用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。

相關文章