1 回答
TA贡献10条经验 获得超2个赞
两个都用过,学过,虽然是NoSQL,但是它们从本质上完全不同(想了解各种不同的NoSQL,推荐看老Martin的NoSQL Distilled这本书)。这里只点出最重要的不同:数据的集中和分散
HBase基于Big Table,和Hadoop MapReduce完美integrate,数据组织以支持scan为最优先(rowkey 按大小排序分region,所以相近的rowkey必然在相同的region server上),甚至每一个get操作的内部实现都是scan。所以你的应用场景需要大量scan操作 或者需要经常配合MapReduce,而random access数据为辅助手段,那么HBase是你的绝佳选择。
Cassandra基于我司的Dynamo,强调自由配置CAP中的C(consistance)和A(availability),强调读写的分散(由于数据都用Distibute Key散列到了不同host,所以相近的Distibute key很大几率散列到不同的host上,这里取决于你的hash算法,这里只说大多数情况)。这种storage model(consistent hash)决定了Cassandra的scan效率比HBase低,但是可以支持更高的并发写与读,并且高并发写和读可以在不同的配置的情况下在一个表上同时实现(由于读写的replica number是可以基于per request 定义的)如果你需要高并发可调节读写,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的协调… 等等
综上所述,两种NoSQL DB cover了两种完全不同的data access pattern,他们俩 完全 不雷同。
至于国内注重HBase?个人猜测嘛,还不是为了跟风hadoop催的… 为人必提大数据,提大数据必提hadoop,hadoop怎么存数据?HFile?那怎么random access? 然后...恩....
Canssandra提供了太多可调节的地方了,调不好可以比MySQL还慢…
添加回答
举报