1 回答

TA貢獻10條經(jīng)驗 獲得超2個贊
兩個都用過,學過,雖然是NoSQL,但是它們從本質上完全不同(想了解各種不同的NoSQL,推薦看老Martin的NoSQL Distilled這本書)。這里只點出最重要的不同:數(shù)據(jù)的集中和分散
HBase基于Big Table,和Hadoop MapReduce完美integrate,數(shù)據(jù)組織以支持scan為最優(yōu)先(rowkey 按大小排序分region,所以相近的rowkey必然在相同的region server上),甚至每一個get操作的內部實現(xiàn)都是scan。所以你的應用場景需要大量scan操作 或者需要經(jīng)常配合MapReduce,而random access數(shù)據(jù)為輔助手段,那么HBase是你的絕佳選擇。
Cassandra基于我司的Dynamo,強調自由配置CAP中的C(consistance)和A(availability),強調讀寫的分散(由于數(shù)據(jù)都用Distibute Key散列到了不同host,所以相近的Distibute key很大幾率散列到不同的host上,這里取決于你的hash算法,這里只說大多數(shù)情況)。這種storage model(consistent hash)決定了Cassandra的scan效率比HBase低,但是可以支持更高的并發(fā)寫與讀,并且高并發(fā)寫和讀可以在不同的配置的情況下在一個表上同時實現(xiàn)(由于讀寫的replica number是可以基于per request 定義的)如果你需要高并發(fā)可調節(jié)讀寫,scan需求少,那么Cassandra則比HBase更合適。
其他的不同就是各種feature了,比如cassandra支持用戶自定義multi version control,multi version conflict resolve,算是一個亮點,而HBase貌似只支持multi version… cassandra的server是peer to peer的,完全不會有single point failure;而HBase則依賴于Master Server的協(xié)調… 等等
綜上所述,兩種NoSQL DB cover了兩種完全不同的data access pattern,他們倆 完全 不雷同。
至于國內注重HBase?個人猜測嘛,還不是為了跟風hadoop催的… 為人必提大數(shù)據(jù),提大數(shù)據(jù)必提hadoop,hadoop怎么存數(shù)據(jù)?HFile?那怎么random access? 然后...恩....
Canssandra提供了太多可調節(jié)的地方了,調不好可以比MySQL還慢…
添加回答
舉報