一、兩種nosql數(shù)據(jù)庫(kù)的基本介紹
以往我們項(xiàng)目用的數(shù)據(jù)庫(kù)無(wú)論是SQL數(shù)據(jù)庫(kù)還是No SQL數(shù)據(jù)庫(kù),都更新了傳統(tǒng)的數(shù)據(jù)存儲(chǔ)方式。 從企業(yè)的項(xiàng)目來(lái)說(shuō),數(shù)據(jù)存儲(chǔ)功能是如何隨著時(shí)間的推移而演變的,并且業(yè)務(wù)流在變需求也隨之改變,逐漸走向更快,更安全、更穩(wěn)定,存儲(chǔ)也不再局限于表格, 我們可以通過(guò)多種方式執(zhí)行和管理數(shù)據(jù)庫(kù)。這也促使我們?cè)趯?shí)際開(kāi)發(fā)中數(shù)據(jù)庫(kù)的選型上范圍更廣。
Apache Cassandra 和 Apache HBase 是兩種流行的數(shù)據(jù)庫(kù)模型類(lèi)型,可用于存儲(chǔ)、管理和提取信息,充分利用數(shù)據(jù)。如果我們仔細(xì)的去比較 Hbase 和 Cassandra,就會(huì)發(fā)現(xiàn)它們有一些共同點(diǎn):例如它們外觀相同,具有相似的特性和功能,與此同時(shí)你也會(huì)發(fā)現(xiàn)它們的運(yùn)作方式上存在著很大差異, 這就是我們將在實(shí)際開(kāi)發(fā)的項(xiàng)目中發(fā)現(xiàn)的問(wèn)題。
二、什么是Hbase和Cassandra?
首先,Hbase 有其著名的數(shù)據(jù)管理方式。 該模型廣泛用于提供對(duì)大量結(jié)構(gòu)化數(shù)據(jù)的隨機(jī)訪問(wèn)。 它是面向列的,構(gòu)建在 Hadoop 分布式文件系統(tǒng)之上。 此應(yīng)用程序?qū)崟r(shí)工作,可用于將數(shù)據(jù)存儲(chǔ)在 HDFS 中。 Hbase 是一種開(kāi)源分布式數(shù)據(jù)庫(kù),它允許使用更簡(jiǎn)單的方法來(lái)消除數(shù)據(jù)復(fù)制。 Hbase 還有其他重要組件,包括 HMaster、Region Server 和 Zookeeper。 根據(jù)HBase的GitHub數(shù)據(jù),Github Stars為4.6K,GitHub Fork – 3.1K等等。
Cassandra 旨在處理跨多個(gè)商品服務(wù)器的大量數(shù)據(jù),確保高可用性而不會(huì)出現(xiàn)故障。 它具有可以處理大量數(shù)據(jù)的分布式架構(gòu)。 為了無(wú)故障地實(shí)現(xiàn)高可用性,數(shù)據(jù)使用多個(gè)復(fù)制因子分布在多臺(tái)機(jī)器上。 根據(jù)Cassandra的GitHub數(shù)據(jù),GitHub Stars為7.5K,GitHub Fork為3.2K。
三、Hbase和Cassandra實(shí)際區(qū)別
3.1功能架構(gòu)
在眾多的數(shù)據(jù)庫(kù)管理系統(tǒng)中,HBase是基于master的架構(gòu),而Cassandra沒(méi)有master,是無(wú)master的。 這意味著 HBase 有單點(diǎn)故障,而 Cassandra 沒(méi)有。 Apache HBase 客戶(hù)端直接與從服務(wù)器通信,無(wú)需聯(lián)系主服務(wù)器;
Hbase模型基于Master-Slave Architecture Model。 而 Cassandra 基于主動(dòng)節(jié)點(diǎn)架構(gòu)模型。 此外,在 Cassandra 與 HBase 的比較中,前者在支持架構(gòu)的數(shù)據(jù)存儲(chǔ)部分和管理方面表現(xiàn)出色。 而后者的架構(gòu)只為數(shù)據(jù)管理而設(shè)計(jì),依賴(lài)于其他系統(tǒng)或技術(shù)進(jìn)行存儲(chǔ)、服務(wù)器狀態(tài)管理、同時(shí)緩存、冗余節(jié)點(diǎn)和元數(shù)據(jù)。
3.2數(shù)據(jù)模型比較:
Hbase 與 Cassandra 所依賴(lài)的數(shù)據(jù)模型略有不同。 雖然這兩個(gè)數(shù)據(jù)庫(kù)聽(tīng)起來(lái)或多或少是一樣的,但兩者之間存在一些主要差異。
Hbase 適用于列族,并且有一個(gè)包含一列和多個(gè)行鍵的列限定符。 當(dāng)談到 Cassandra 查詢(xún)語(yǔ)言時(shí),它也像 Hbase 單元格一樣具有列。 Cassandra 也是一個(gè)面向列的數(shù)據(jù)庫(kù)。
Cassandra 鍵的一個(gè)特點(diǎn)是它只允許一個(gè)主鍵有多個(gè)列,而 HBase 只帶有 1 列行鍵,并將行鍵設(shè)計(jì)的責(zé)任放在開(kāi)發(fā)人員身上。 此外,Cassandra 的主鍵包含分區(qū)鍵和集群列,其中分區(qū)鍵可能包含不同的列。
3.3 讀寫(xiě)性能比較:
如果涉及到性能并且我們正在比較 Apache Cassandra 和 Apache HBase,那么我們還必須考慮其他方面。 考慮了兩種類(lèi)型模型的讀寫(xiě)能力。
從寫(xiě)的角度看:
HBase 和 Cassandra 服務(wù)器上的寫(xiě)入路徑幾乎相同。 與 HBase 相比,Cassandra 有一些優(yōu)勢(shì),例如數(shù)據(jù)結(jié)構(gòu)的名稱(chēng)不同,并且有多個(gè)服務(wù)器供 Cassandra 執(zhí)行和實(shí)施。 HBase 不會(huì)同時(shí)寫(xiě)入日志和緩存的事實(shí)。
從讀的角度看:
在讀取選項(xiàng)方面,Casandra 非??烨乙恢拢?span lang="EN-US"> HBase 有一段路要走,而且相對(duì)較慢。 Hbase比較慢,因?yàn)樗粚?xiě)入一臺(tái)服務(wù)器,沒(méi)有比較各個(gè)節(jié)點(diǎn)數(shù)據(jù)版本的設(shè)施。 盡管 Cassandra 每秒可以處理大量讀取,但這些讀取是有針對(duì)性的并且很可能被拒絕。
所以從讀寫(xiě)操作相比較來(lái)看Cassandra 更有優(yōu)勢(shì)
3.4 Infrastructure模式
如果我們談?wù)摶A(chǔ)設(shè)施,那么我們就是在談?wù)撛诰S護(hù)高基礎(chǔ)設(shè)施方面發(fā)揮關(guān)鍵作用的所有工具。 當(dāng)我們看到 HBase 時(shí),它利用 Hadoop 基礎(chǔ)架構(gòu),其中包括所有移動(dòng)部件,例如 HBase 主節(jié)點(diǎn)、Zookeeper、名稱(chēng)和數(shù)據(jù)節(jié)點(diǎn)。
當(dāng)我們看到 Cassandra 時(shí),它帶有各種操作和基礎(chǔ)設(shè)施。 除了基礎(chǔ)設(shè)施之外,它還采用了各種 DBMS。 除此之外,我們還可以找到許多使用 Storm 或 Hadoop 的 Cassandra 應(yīng)用程序。 此外,其基礎(chǔ)設(shè)施建立在單節(jié)點(diǎn)類(lèi)型結(jié)構(gòu)上。
3.5 數(shù)據(jù)安全
數(shù)據(jù)的安全性是 HBase 和 Cassandra 的一個(gè)重要方面。 與其他數(shù)據(jù)庫(kù)不同,這里所有的 NoSQL 數(shù)據(jù)庫(kù)都存在安全問(wèn)題。 企業(yè)保護(hù)數(shù)據(jù)的主要原因之一是使性能達(dá)到標(biāo)準(zhǔn)水平,這樣系統(tǒng)就不會(huì)變得笨重和不靈活。
但是,可以肯定地說(shuō),這兩個(gè)數(shù)據(jù)庫(kù)都具有一些確保數(shù)據(jù)安全的功能:兩者的身份驗(yàn)證和授權(quán),以及 Cassandra 的節(jié)點(diǎn)間+客戶(hù)端到節(jié)點(diǎn)加密。 反過(guò)來(lái),HBase 提供了與構(gòu)建它的其他技術(shù)急需的安全通信。
3.6 技術(shù)支持
Hbase 提供對(duì)每個(gè)單元級(jí)別的訪問(wèn)。 它主要側(cè)重于與管理員協(xié)作并負(fù)責(zé)數(shù)據(jù)集的所有可見(jiàn)性標(biāo)簽。 同時(shí),它將通知用戶(hù)組有關(guān)可以在行級(jí)別訪問(wèn)的標(biāo)簽。 Cassandra 在行級(jí)別訪問(wèn)標(biāo)簽并分配職責(zé)和條件。
3.7 學(xué)習(xí)成本
文檔是學(xué)習(xí)任何數(shù)據(jù)庫(kù)過(guò)程的重要組成部分當(dāng)然平時(shí)我們也能看一些教學(xué)視頻,但如果一個(gè)新的技術(shù)出來(lái),我們可能最先通過(guò)官方的文檔來(lái)了解。 學(xué)習(xí) Cassandra 并不容易,因?yàn)槲臋n不符合標(biāo)準(zhǔn)。 而在 HBase 中,由于更好的文檔,它非常容易學(xué)習(xí)。
3.8 查詢(xún)語(yǔ)言
兩種語(yǔ)言都是基于 JRuby 的,HBase shell 也不例外。 Cassandra 作為一種基于查詢(xún)的語(yǔ)言非常具體。 CQL 在同一行 SQL 中建模。 與HBase查詢(xún)語(yǔ)言相比,你會(huì)發(fā)現(xiàn)CQL的特性更多,功能也更豐富。
四、Hbase和Cassandra的相似的地方
4.1 數(shù)據(jù)庫(kù)
HBase 和 Cassandra 都是開(kāi)源的 NoSQL 數(shù)據(jù)庫(kù)。 這兩種技術(shù)都可以輕松處理大型數(shù)據(jù)集以及圖像、音頻和視頻等非關(guān)系數(shù)據(jù)。
4.2 數(shù)據(jù)的擴(kuò)展性
HBase 和 Cassandra 都具有很高的線(xiàn)性可擴(kuò)展性。 想要處理更多數(shù)據(jù)的用戶(hù)可以通過(guò)增加集群中的節(jié)點(diǎn)數(shù)量來(lái)實(shí)現(xiàn)。 由于兩個(gè)節(jié)點(diǎn)都具有靈活性,因此您可以在不同的場(chǎng)景中單獨(dú)使用它們中的任何一個(gè)。 結(jié)果將是相同的,不會(huì)有任何效率問(wèn)題。
4.3 集群節(jié)點(diǎn)復(fù)制
這兩種類(lèi)型的模型——HBase 和 Cassandra 都具有強(qiáng)大的安全性,即使在系統(tǒng)出現(xiàn)故障后也能防止數(shù)據(jù)丟失。 所以為了避免重復(fù)因素,有一個(gè)特定的模式。 通過(guò)復(fù)制模式,可以做到這一點(diǎn)。 在一個(gè)節(jié)點(diǎn)上寫(xiě)入的數(shù)據(jù)被復(fù)制到集群中的多個(gè)節(jié)點(diǎn)。
4.4 數(shù)據(jù)編碼
兩個(gè)數(shù)據(jù)庫(kù)都是面向列的,寫(xiě)路徑相似。 因此,充當(dāng)主要來(lái)源的是數(shù)據(jù)庫(kù)中主要存儲(chǔ)單元的列。 因?yàn)橛脩?hù)可以根據(jù)自己的需要自由添加列。 此外,正確的路徑從將寫(xiě)入操作記錄到日志文件開(kāi)始。 這樣做主要是為了確保耐用性。
五、區(qū)分 HBase 和 Cassandra 表
比較因素 Hbase Cassandra 數(shù)據(jù)庫(kù)基礎(chǔ) Google BigTable 是 HBase 的基礎(chǔ)。 Cassandra 建立在 Amazon DynamoDB 之上。 建筑模型 它采用主從架構(gòu)模型。 它采用主動(dòng)-主動(dòng)節(jié)點(diǎn)架構(gòu)模型。 協(xié)處理器 可以在 HBase 中利用協(xié)處理器的功能。 Cassandra 中沒(méi)有協(xié)處理器功能 建筑風(fēng)格 Hbase 遵循 Hadoop 基礎(chǔ)架構(gòu)。 Cassandra 為不同的應(yīng)用程序充分利用了大量的 DBMS 和基礎(chǔ)設(shè)施。 集群生態(tài)系統(tǒng) HBase搭建集群生態(tài)并不容易 Cassandra 集群設(shè)置比 HBase 更簡(jiǎn)單 事物處理 HBase 使用兩種方法來(lái)處理事務(wù): “檢查并放置” ‘讀取-檢查-刪除’ Cassandra 還通過(guò)兩種主要方式處理事務(wù) “比較和設(shè)置” “行級(jí)寫(xiě)隔離” 讀、寫(xiě)操作 HBase 非常擅長(zhǎng)密集讀取功能 Cassandra 寫(xiě)得很好。 品牌的商家使用 Adobe Walmart
Yahoo
Netflix
eBay
六、關(guān)于兩者在實(shí)際項(xiàng)目中的選擇
在實(shí)際的開(kāi)發(fā)中作為系統(tǒng)的開(kāi)發(fā)人員會(huì)涉及數(shù)據(jù)庫(kù)、框架等等選型的問(wèn)題,一般在項(xiàng)目時(shí)間充足的情況下,我們會(huì)選擇盡量了解客戶(hù)的業(yè)務(wù)需求,從而選擇符合業(yè)務(wù)需求的數(shù)據(jù)庫(kù)。Hbase 和 Cassandra 都是非關(guān)系型數(shù)據(jù)庫(kù),它們雖然相同,但又彼此不同。 盡管有相似的領(lǐng)域,但存在許多差異,使每個(gè)領(lǐng)域都以自己的方式獨(dú)一無(wú)二。 就像兩者各有利弊。 我們知道Cassandra擅長(zhǎng)寫(xiě)作,而HBase擅長(zhǎng)精讀。 如果說(shuō) Cassandra 有什么弱點(diǎn),那就是數(shù)據(jù)一致性,而 HBase 在數(shù)據(jù)可用性方面有優(yōu)勢(shì)。 我們看到雙方都試圖消除這些問(wèn)題的負(fù)面影響,并與積極的影響站在一起。數(shù)據(jù)庫(kù)也好,框架也好,都是一只在更新,一直在做功能上的完善不管是用戶(hù)還是開(kāi)發(fā)團(tuán)隊(duì),都希望他們?cè)阶鲈胶?,用著越?lái)越方便。