Cassandra 和 HBase 有什么区别?
Apache Cassandra 和 Apache HBase 是以非表格格式存储数据的 NoSQL 数据库。二者都在大数据基础设施上以键值存储的方式存储数据,以准确、高效地管理海量数据。但是,它们确实存在更适合不同用例的架构差异。例如,Cassandra 可提供快速的读写性能,而 HBase 则可实现更高的数据一致性。HBase 在处理大型稀疏数据集方面也更为高效。组织会根据不同的大数据用例使用 Cassandra 和 HBase。
相似之处:Cassandra 和 HBase
Cassandra 和 HBase 是两个 NoSQL 数据库,可以存储、处理和检索数十亿个数据集。它们在以下方面有重叠的相似之处。
大数据应用程序
您可以使用 Cassandra 和 HBase 存储大量的非结构化、非关系数据。它们不同于传统的数据库系统,后者将数据存储在简单的行和列中。您可以使用 Cassandra 和 HBase 存储图像、音频、视频和其他非结构化数据类型以进行大规模处理。
开源
Apache Software Foundation 将 Cassandra 和 HBase 作为开源项目发布和管理。HBase 是从 Google BigTable 引入的概念发展而来,并于 2008 年由 Apache 公开发布。Cassandra 是一项旨在解决 Facebook 收件箱搜索问题的计划。它使用了 BigTable 的某些功能以及 Amazon Dynamo 的其他功能。
可扩展性
您可以通过向 HBase 集群添加更多区域服务器来扩展 HBase 以满足不断增长的数据需求。然后,当数据节点超过一定容量时,NoSQL 数据库系统可以将其分配到新区域。Cassandra 集群还可以支持多个节点扩展其数据管理功能。通过增加节点数量,可以有效地均匀分布数据,避免出现流量瓶颈。
数据恢复
Cassandra 和 HBase 中的数据节点都具有容错能力。在 Cassandra 中,每个节点都支持数据复制。写入操作会自动发送到分配给特定数据的所有节点。HBase 也有类似的数据复制方法,该方法由其运行的 Hadoop Distributed File System(HDFS)自动执行。HDFS 在不同的服务器上创建和维护数据副本。两个 NoSQL 数据库都根据重复因子在不同的物理网络中复制数据节点,以降低全网故障的风险。
写入路径
Cassandra 和 HBase 都将数据组织成列。存储数据时,每个数据库都会寻找相应的列族,该列族将相关信息保存在一起。当数据库将数据附加或存储到列时,这两个数据库也会将数据写入日志文件。
架构差异:Cassandra 与HBase
Cassandra 和 HBase 采用不同特征的 CAP 定理运行。CAP 定理规定,分布式系统在任何给定时间都可以具有以下两个特征:
- 一致性
- 可用性
- 分区容错性
由于分区容错性是存储大量数据集的数据库所必需的,因此 Cassandra 和 HBase 在可用性和一致性方面有所不同。Cassandra 采用点对点的节点安排,具有高可用性和分区容错性。HBase 提供一致性和分区容错性,因为单个 HBase 主节点会将数据复制到所有节点。
接下来,我们将进一步解释这两个数据库管理数据请求的架构差异。
数据模型
Cassandra 和 HBase 均将数据组织成组、行和列,但每个数据库都采用不同的布局。在 Cassandra 中,相关数据的列存储在称为键空间的更广泛类别下的行中。例如,Cassandra 数据库可能包含以下键空间、列族和单元格排列:
- 键空间:CustomerOrders
- 列族:Client
- ID、FirstName、LastName
- 列族:Orders
- ID、Item、Price
- 列族:Client
Client 列族位于 Orders 列族上方的分区中。在实际应用中,键空间将多个列族堆叠在一起。
HBase 架构的布局类似于传统关系数据库的布局。HBase 在表中使用顺序行键,而不是每个列族使用一个 ID。然后,它将属于同一列族的列排列在一起,便于数据检索。举个例子:
- 表;CustomerOrders
- 行键,列族:Client {First Name, LastName},列族:Order {Item, Price}
关键组件
Cassandra 使用一种称为一致哈希的技术,使每个节点都能在其对等联网中快速找到特定数据。其关键组件包括 MemTable、Commit Log 和 SS 表。它们共同构成了 Cassandra 架构中节点、数据中心和集群的写入路径。
HBase 位于 HDFS 之上。它通过 HBase 主服务器、区域服务器和 Zookeeper 进行数据管理。
Cassandra 独立提供数据管理和数据存储功能,而 HBase 需要外部系统来实现数据存储功能。
核心设计
Cassandra 在双活架构上运行,其中每个节点均响应写入和其他请求。即使特定节点不存储请求的数据,它也会使用名为 Gossip 协议的点对点通信方法从其他节点检索这些数据。
HBase 采用主备设置,其中 HBase 主节点可以控制其他节点的区域服务器。如果没有 HBase 主节点副本,HBase 架构就会出现单点故障。您可以复制多个 HBase 主节点,但只有一个节点负责所有区域服务器。
下图显示了 HBase 中的主备设置。
查询语言
Cassandra 支持使用 Cassandra 查询语言(CQL)在数据库中进行数据操作。您可以使用 CQL 在与 SQL 类似的描述性说明中添加、删除或更新记录。HBase 查询语言由基本的 Shell 命令组成,学习起来比较费力。
性能:Cassandra 与HBase
Cassandra 和 HBase 都提供对大型数据集的高速访问以进行大数据分析。数据库在以下方面表现出性能差异。
延迟
延迟是向数据库系统发送指令与存储或检索数据之间的时间间隔。通常,随着数据读取和写入次数的增加,HBase 的延迟会降低。对于 Cassandra 来说,情况恰恰相反,它在获取更多数据时会出现更大的延迟。
吞吐量
吞吐量衡量数据库每秒处理的读取或写入操作的次数。HBase 的吞吐量保持在 10-20 万的稳定水平,但在达到 25 万之后,吞吐量有所提升。Cassandra 的吞吐量随着写入或读取更多数据而增加。
读取性能
Cassandra 中的读取操作涉及在分区表上查找存储数据的确切位置。如果搜索涉及辅助键或非分区表,则 Cassandra 搜索集群中的每个节点需要更长的时间。此外,当多个节点包含相同数据的不同版本时,就会发生数据不一致。
HBase 的读取性能比 Cassandra 更好,因为它将所有数据写入单个服务器。与 Cassandra 不同,在 HBase 中读取数据不需要数据库系统在分区表中进行搜索。HBase 用来存储数据的 HDFS 提供布隆过滤器和块缓存,从而加快数据检索速度。
写入性能
Cassandra 完成写入操作的速度比 HBase 快。使用 Cassandra,您可以同时将数据写入日志和缓存。HBase 不支持并行写入。相反,HBase 客户端应用程序通过 Zookeeper 启动写入操作,HBase 主节点提供存储数据的地址。HBase 中的其他步骤降低了数据写入的速度。
其他主要区别:Cassandra 与HBase
您可以同时使用 Cassandra 和 HBase 来构建数据科学应用程序,但是细微的差异会影响您的选择。
安全性
使用 Cassandra,您可以调节对记录行级别的访问权限。它还提供 SSL 加密以保护节点之间的数据交换。与 Cassandra 不同,HBase 提供了额外的单元格级别加密,以及加密和身份验证功能。
数据分区
Cassandra 支持有序分区,它可以通过使用列作为分区键来扫描按顺序排序的记录。虽然这可能有帮助,但是有序分区会使负载平衡变得复杂,因为在单个节点上进行多次写入。HBase 表不支持有序分区。
节点通信
在 Cassandra 架构中,种子节点是集群间通信的关键点。这些节点使用 Gossip 协议在不同的集群之间移动数据。HBase 使用活动的 HBase 主节点来协调多个区域服务器之间的通信。在此架构中,数据移动由 Zookeeper 协议协商。
何时使用:Cassandra 与HBase
Cassandra 和 HBase 数据库都可以为不同类型的大数据应用程序提供帮助。接下来,我们将分享在不同的情况下哪个分布式数据库更好。
可用性与一致性
Cassandra 适用于需要频繁写入数据的应用场景,但它没有针对频繁更新或删除数据进行优化。例如,组织使用 Cassandra 来构建消息传递系统、交互式数据处理解决方案和实时传感器数据存储。HBase 更适合需要数据一致性和频繁处理的应用程序。例如,银行、医疗保健和电信行业解决方案使用 HBase 来分析大量数据。
数据库设置
Cassandra 更易于设置,因为它是一款包含所有必要数据库组件的独立产品。与 Cassandra 不同,HBase 依赖多个 Hadoop 组件(例如 Zookeeper、HDFS Primary 和 HDFS DataNode)来运行。设置可能很简单,但是在实际应用程序中,维护多个相互依赖关系可能是一项挑战。如果您已经在使用 Hadoop 基础设施,您可能会发现迁移到 HBase 比迁移到 Cassandra 更容易。
差异摘要:Cassandra 与HBase
Cassandra |
HBase |
|
核心设计 |
采用双活架构。所有节点处理读/写请求。 |
使用主备架构。HBase 主要控制多个区域服务器。 |
关键组件 |
MemTable、Commit Log 和 SS 表。 |
HBase 主服务器、区域服务器和 Zookeeper。 |
数据模型 |
在键空间中存储相关列族的行。 |
采用顺序行键水平排列的列族。 |
查询语言 |
使用 Cassandra 查询语言。 |
使用 Shell 命令。 |
延迟 |
更高的延迟和更多的数据获取。 |
更低的延迟和更多的数据操作。 |
吞吐量 |
吞吐量随着数据操作的增加而增加。 |
经过一定次数的操作后,吞吐量增加。 |
读取性能 |
读取速度慢。指分区表的读取位置。可能会出现数据不一致的情况。 |
更好的读取性能和数据一致性。 |
写入性能 |
更好的写入性能。同时写入日志和缓存。 |
其他步骤。通过 Zookeeper 和 HBase 主服务器。 |
安全性 |
将访问权限控制到角色级别。 |
将访问权限控制到单元格级别。 |
数据分区 |
支持有序分区。 |
不支持有序分区。 |
节点通信 |
使用 Gossip 协议。 |
使用 Zookeeper 协议。 |
AWS 如何帮助您应对 Cassandra 和 HBase 的要求?
Amazon Web Services(AWS)提供可扩展的云数据库服务,您可以使用这些服务来高效、经济地实施数据科学技术。您可以使用以下 AWS 服务来支持您的 Cassandra 和 HBase 数据库,而不必手动预置底层基础设施:
- Amazon Keyspaces(Apache Cassandra 兼容)是一项用于运行高吞吐量 Cassandra 工作负载的在线数据库服务。借助 Amazon Keyspaces,您可以扩展应用程序,同时将响应时间保持在个位数毫秒以内。
- 使用 Amazon EMR,您可以为大规模数据处理应用程序部署 HBase 集群。在 EMR 上运行 HBase 可通过在Amazon Simple Storage Service(Amazon S3)上备份存储的数据来提高数据的可恢复性。
立即创建账户,开始在 AWS 上进行大数据分析。