天天看點

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

來自:過往資料大資料

綜合自網絡:

https://blog.csdn.net/aa5305123/article/details/83142514

Hadoop 獲得了許多大資料應用的信譽,但實際情況是,NoSQL資料庫是一直處于更加廣泛部署和更廣泛的發展中的技術。盡管選擇 Hadoop 作為應用存儲,相對來說更直接簡單。但是,具體采用什麼樣的 NoSQL 資料庫是個值得思考的問題,畢竟,還有超過100種的 NoSQL 資料庫。

我們應該選擇哪一種?

選擇傾向

“任何像樣規模的企業都會使用各種不同類型的資料存儲技術,為應對各種不同類型的資料。”Martin Fowler認為,現實的情況是你沒有足夠的精力去學習更多的存儲技術。

幸運的是,選擇越來越容易,因為市場主要圍繞在三個NoSQL資料庫上:MongoDB,Cassandra(主要由DataStax開發的,誕生于Facebook),和HBase的(和Hadoop緊密關聯在一起,也被相同社群開發出來)。

補充一點,我故意排除 Redis。相對于大資料存儲,它主要用于高速記憶體緩存資料應用。

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

上圖來自于 DB-Engines 各種資料庫的排名(

https://db-engines.com/en/ranking_trend

) ,可以看到前面幾年基本上都是關系資料庫 Oracle、MySQL、SQL Server 以及 PostgreSQL 的天下。MongoDB 排名第五名, Cassandra 排名十名,而 HBase 排名十七名。

為了更好解釋為什麼這三個資料庫技術的如此耀眼,我問的每一個具有代表性的人,以确定它們成功關鍵因素: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。