Cassandra vs HBase
By Vaibhav Puranik Translated By Jametong
我們是一家廣告網(wǎng)絡(luò)公司.我們需要存儲展示與點擊信息.我們在為我們的新項目評估多個不同的大批量數(shù)據(jù)(或nosql,或任何你喜歡的稱呼)系統(tǒng).過去8個月中,我們一直在一個測試產(chǎn)品上使用HBase,并且滿意它的表現(xiàn),但是,最近Cassandra的風頭很高,因此,我們決定對它做個測試.我認為,從某些角度講,Cassandra團隊的推廣做的很不錯.你將發(fā)現(xiàn),在SantaMonica,哪怕是非技術(shù)人員(諸如風險投資商、CEO以及產(chǎn)品經(jīng)理)也會相互推薦使用Cassandra.
Cassandra給人的第一印象很好.它們的首頁看上去比HBase更加專業(yè)也更加友好.安裝并運行它也很簡單.這個網(wǎng)站的文檔很豐富.說實在話,安裝并讓其工作只花費了我5分鐘的時間.
真正的挑戰(zhàn)是理解Cassandra的數(shù)據(jù)模型,并嘗試在我們的使用場景中實現(xiàn)它.我們很清楚如何在HBase中實現(xiàn)它,因為我們對HBase有相當不錯的使用經(jīng)驗.雖然Cassandra也是從BigTable出繼承了同樣的數(shù)據(jù)模型,Cassandra與HBase之間還是有一些根本性的不同的.我試圖用表格整理了兩個系統(tǒng)之間的差異,如下:
Cassandra | HBase |
---|---|
缺少類似于表的概念.所有的文檔都告訴你,有多個Keyspace的情況不常見.這意味著你必須在一個集群中共享同一個key space.另外,新增keyspace需要重啟集群才能生效. | 存在表相關(guān)的概念.每個表都有它自己的key space. 這一點對我們來說很重要.添加/刪除表都很容易,跟在RDBMS中一樣. |
使用字符串的Key.通常使用uuid作為Key.如果希望你的數(shù)據(jù)按照時間排序,可以使用TimeUUID. | 使用二進制Key.通常將三個不同的項目組合在一起來構(gòu)建一個Key.這意味著你可以搜索一個給定表中的多個鍵. |
即使使用TimeUUID,也不會發(fā)生熱點問題,因為Cassandra會對客戶端請求做負載均衡. | 如果Key的第一部分是時間或者序列數(shù),就會發(fā)生熱點問題.所有新的Key都會被插入同一個區(qū)域,一直到此區(qū)域被塞滿(因而導(dǎo)致出現(xiàn)熱點問題). |
支持列排序 | 不支持列排序 |
超列(Super Column)概念使得你可以設(shè)計非常靈活也非常復(fù)雜的表結(jié)構(gòu). | 不支持超列.不過可以設(shè)計一個類似與超列的結(jié)構(gòu),不過列名稱與值都是二進制的. |
沒有便捷的方法來自增長一個列的值.實際上,最終一致性的不同特性使得更新/寫入一條記錄并在更新后立即讀出非常困難.必須確保使用R+W>N來實現(xiàn)強一致性. | 由于設(shè)計上就是一致性.提供了一個非常便捷的方法來自增計數(shù)器.非常適合做數(shù)據(jù)匯總. |
剛開始支持Map Reduce接口.還需要有一個hadoop集群來運行它.需要將數(shù)據(jù)從Cassandra集群遷移到Hadoop集群.不適合對大型數(shù)據(jù)運行map reduce任務(wù). | 對Map Reduce的支持是原生的.HBase構(gòu)建在Hadoop集群上.數(shù)據(jù)不需要做遷移. |
如果不需要Hadoop的話,維護相對簡單. | 由于包含多個諸如Zookeeperr、Hadoop以及HBase本身的可活動組件,維護相對復(fù)雜. |
到目前為止,還沒有本地化的Java Api支持.沒有Java文檔.雖然是使用Java編寫的,你還是必須用Thrift接口來與集群進行通訊. | 有友好的本地Java API.比Cassandra更像是Java系統(tǒng).由于我們的應(yīng)用是基于Java的,這一點對我們很重要. |
沒有主節(jié)點,因此也沒有單點故障. | 雖然在概念上有一個主節(jié)點服務(wù),HBase本身對它的依賴并不嚴重.即使在主節(jié)點宕機的情況下,HBase集群仍然可以正常提供數(shù)據(jù)服務(wù).Hadoop的Namenode是一個單點故障. |
在按照這種方式比較過數(shù)據(jù)模型與相關(guān)特性后,對我們來講,HBase是明顯的優(yōu)勝者.我的看法是,如果你確實需要一致性,HBase是一個明顯的選擇.更進一步,本地化的MapReduce支持、表概念以及可修改而且不用重啟集群的簡單的表結(jié)構(gòu)是你不可忽略的加分項.HBase是一個更加成熟的平臺.當人們說Twitter、Facebook在使用Cassandra時,他們忘記了這些公司同時也在使用HBase.實際上,Facebook最近雇用了一個HBase的代碼提交者(Commiter),這清楚地表明Facebook對HBase的興趣.
總之,我們?nèi)χС諬Base!!
Related posts: