Cassandra与HBase比较

yichen
yichen
发布于 2024-05-15 / 28 阅读
0
0

Cassandra与HBase比较

一、架构思路

Hbase是一个分布式的数据库,使用Zookeeper来管理集群。

在Hbase的概念中,RegionServer对应于集群中的一个节点,而一个RegionServer负责管理多个Region。一个Region代 表一张表的一部分数据,所以在Hbase中的一张表可能会需要很多个Region来存储其数据,但是每个Region中的数据并不是杂乱无章 的,Hbase在管理Region的时候会给每个Region定义一个Rowkey的范围,落在特定范围内的数据将交给特定的Region,从而将负载分 摊到多个节点上,充分利用分布式的优点。另外,Hbase会自动的调节Region处在的位置,如果一个RegionServer变得Hot(大量的请求 落在这个Server管理的Region上),Hbase就会把Region移动到相对空闲的节点,依次保证集群环境被充分利用。

二、存储模型

有了架构层面的保证,接下来的事情就只是关注于数据的具体存储了。这里就是每个Region所承担的工作了。我们知道一个Region代表的是一张 Hbase表中特定Rowkey范围内的数据,而Hbase是面向列存储的数据库,所以在一个Region中,有多个文件来存储这些列。Hbase中数据 列是由列簇来组织的,所以每一个列簇都会有对应的一个数据结构,Hbase将列簇的存储数据结构抽象为Store,一个Store代表一个列簇。

在Hbase底层的Store数据结构中,每个StoreFile内的数据是有序的,但是StoreFile之间不一定是有序的,Store只 需要管理StoreFile的索引就可以了。这里也可以看出为什么指定版本和Rowkey可以加强查询的效率,因为指定版本和Rowkey的查询可以利用 StoreFile的索引跳过一些肯定不包含目标数据的数据。

Cassandra是一种用于数据存储和管理的“自给自足”技术,而HBase则不是。后者旨在用作HDFS随机数据输入/输出的工具,这就是为什么将其所有数据存储在此处的原因。此外,HBase使用Zookeeper作为服务器状态管理器,并使用“大师”来知道所有元数据在哪里(以避免在包含元数据的主服务器出现故障时立即出现群集故障)。因此,HBase复杂的相互依存系统更加难以配置,保护和维护。

Cassandra擅长写入,而HBase擅长密集读取。 Cassandra的弱点是数据一致性,而HBase的痛苦是数据可用性,尽管两者都试图减轻这些问题的不利后果。而且,两者都不会频繁删除和更新数据。

三、对比

HBase

Cassandra

语言

Java

Java

出发点

BigTable

BigTable and Dynamo

License

Apache

Apache

Protocol

HTTP/REST (also Thrift)

Custom, binary (Thrift)

数据分布

表划分为多个region存在不同region server上

改进的一致性哈希(虚拟节点

存储目标

大文件

小文件

一致性

强一致性

最终一致性,Quorum NRW策略

架构

master/slave

p2p

高可用性

NameNode是HDFS的单点故障点

P2P和去中心化设计,不会出现单点故障

伸缩性

Region Server扩容,通过将自身发布到Master,Master均匀分布Region

扩容需在Hash Ring上多个节点间调整数据分布

读写性能

数据读写定位可能要通过最多6次的网络RPC,性能较低。

数据读写定位非常快

数据冲突处理

乐观并发控制(optimistic concurrency control)

向量时钟

临时故障处理

Region Server宕机,重做HLog

数据回传机制:某节点宕机,hash到该节点的新数据自动路由到下一节点做 hinted handoff,源节点恢复后,推送回源节点。

永久故障恢复

Region Server恢复,master重新给其分配region

Merkle 哈希树,通过Gossip协议同步Merkle Tree,维护集群节点间的数据一致性

成员通信及错误检测

Zookeeper

基于Gossip

CAP

1,强一致性,0数据丢失。2,可用性低。3,扩容方便。

1,弱一致性,数据可能丢失。2,可用性高。3,扩容方便。


评论