试图确定哪个最适合你,这取决于你将要使用它的原因,他们每个人都有自己的优势,没有更多的细节,它变得更像是一场宗教战争。你引用的这篇文章也超过了一年,从那以后都经历了许多变化。请记住,我不熟悉最近的Cassandra开发。
话虽如此,我会转述HBase的提交者安德鲁Purtell,并添加了一些我自己的经验:
HBase的是更大的生产环境中(1000个节点),虽然仍处于Cassandra的的球场〜400节点安装,所以它真的是一个边际差异。
HBase和Cassandra都支持群集/数据中心之间的复制。我相信HBase更多地向用户公开,所以它看起来更复杂,但是你也获得了更多的灵活性。
如果强大的一致性是您的应用程序需要的,那么HBase可能更适合。它从根本上设计为一致。例如,它允许更简单地实现原子计数器(我认为Cassandra刚刚得到它们)以及Check和Put操作。
从我的理解来看,写入性能非常好,这是Facebook使用HBase为其使者的原因之一。
我不确定Cassandra的有序分区程序的当前状态,但过去需要手动重新平衡。如果你愿意,HBase会为你处理。有序分区对于Hadoop风格处理非常重要。
Cassandra和HBase都很复杂,Cassandra只是把它隐藏得更好。如果你看看代码库Cassandra就像分层一样,HBase通过使用HDFS来存储更多的信息。如果你比较Dynamo和Bigtable的论文,你会发现Cassandra的操作理论实际上更复杂。
HBase有更多的单元测试FWIW。
所有Cassandra RPC都是Thrift,HBase拥有Thrift,REST和本地Java。 Thrift和REST只提供全部客户端API的一部分,但如果您希望纯粹的速度,那么本地Java客户端就在那里。
对等和主从同时具有优势。主 - 从设置通常使调试变得更容易,并降低了一些复杂性。
HBase并不仅限于传统的HDFS,您可以根据自己的需要更换底层存储。MapR看起来很有趣,我听说过好东西,虽然我没有用过它自己。
我很确定Facebook会因为与模块化软件堆栈相关的其他原因在100个节点HBAse群集中分片。在最近的一次演讲中,来自Cloudera的Todd Lipcon提到[1PT 1000节点HBase簇](http://www.slideshare.net/cloudera/sf-nosql2011/58),并且我已经提到了700多个节点的HBase簇。 – cftarnas
好点。这也可能是特定工作负载。 – jbellis
上面有很多Cassandra的优点。但为什么Facebook最终选择HBase而不是Cassandra? –