下表说明了 Cassandra 和 HBase 之间的主要区别:
HBase | Cassandra |
---|---|
HBase 是基于 Bigtable(Google) | Cassandra 基于 DynamoDB(亚马逊)。它最初是由前亚马逊工程师在 Facebook 开发的。这是 Cassandra 支持多数据中心的原因之一。 |
HBase 使用 Hadoop 基础架构(Zookeeper,NameNode,HDFS)。部署 Hadoop 的组织必须具备 Hadoop 和 HBase 的知识。 | Cassandra 与 Hadoop 分开开发,其基础工具和操作知识的要求与 Hadoop 不同。然而,对于分析,许多 Cassandra 部署使用 Cassandra + Storm(使用 zookeeper)和/或 Cassandra + Hadoop。 |
HBase-Hadoop 基础工具有几个由 Zookeeper,Name Node,HBase master 和数据节点组成的“移动部件”,Zookeeper 是集群的,自然是容错的。名称节点需要集群为容错。 | Cassandra 使用单个节点类型。所有节点相等并执行所有功能。任何节点都可以作为协调器,确保没有 Spof。添加 Storm 或 Hadoop 当然会增加基础设施的复杂性。 |
HBase 非常适合进行基于范围的扫描。 | Cassandra 不支持基于范围的行扫描,这可能在某些用例中是有限制的。 |
HBase 提供跨越一个 HBase 集群的异步复制。 | Cassandra 随机分区提供了跨越单行的行复制。 |
HBase 仅支持有序分区。 | Cassandra 正式支持有序分区,但 Cassandra 没有生产用户使用有序分配,由于“热点”创建并操作困难等热点引起。 |
由于有序分区,HBase 可以轻松地水平放置,同时还支持 Rowkey 范围扫描。 | 如果数据存储在 Cassandra 的列中以支持范围扫描,Cassandra 中行大小的实际限制是10 兆字节。 |
HBase 支持原子比较和设置,HBase 支持一行内的事务。 | Cassandra 不支持原子比较和设置。 |
HBase 不支持单行读取负载平衡,一行只有一个区域服务器一次提供。 | Cassandra 将支持单行读取负载平衡。 |
Bloom 过滤器可用于 HBase 作为另一种形式的索引。 | Cassandra 使用 bloom 过滤器进行键查找。 |
触发器由 HBase 中的协处理器功能支持。 | Cassandra 不支持协处理器功能。 |