18

在过去的六个月里,我一直在使用 HBase,并且通过 Amazon 了解了 DynamoDB。维护明智的发电机数据库看起来更容易处理,因为它由亚马逊负责。但是是否从 hbase 切换到 dynamo db 对我来说是一个问题。

除了维护集群之外,我找不到令人满意的理由从 hbase 切换到 dynamo db。

有人可以分享对此的想法。

4

1 回答 1

28

您必须从根本上寻找您的需求,DynamoDB 以最少的维护工作和极具吸引力的财务成本提供了出色的可扩展性和性能。但是,就可以存储的内容(大小和数据类型)而言,Apache HBase 更加灵活。

另一个非常重要的评估点是哪种数据模型(列宽或键值)更适合您的用例。

Apache HBase 为您提供了非常灵活的行键数据类型的选项,而 DynamoDB 仅允许主键属性的标量类型。另一方面,DynamoDB 提供了非常容易创建和维护二级索引的方法,而您必须在 Apache HBase 中手动执行这些操作。

以下链接中的更多信息:http: //d0.awsstatic.com/whitepapers/AWS_Comparing_the_Use_of_DynamoDB_and_HBase_for_NoSQL.pdf

以下是关键点的摘要:

总之,Amazon DynamoDB 和 Apache HBase 都定义了允许有效存储数据以优化查询性能的数据模型。Amazon DynamoDB 对其项目大小施加了限制,以实现高效处理并降低成本。

Apache HBase 使用列族的概念来提供数据局部性以实现更高效的读取操作。

Amazon DynamoDB 支持标量和多值集,以适应各种非结构化数据集。同样,Apache HBase 将其键/值对存储为任意字节数组,使其能够灵活地存储任何数据类型。

Amazon DynamoDB 支持内置二级索引,并自动更新和同步所有索引与其父表。使用 Apache HBase,您可以自己实施和管理自定义二级索引。

从数据模型的角度来看,如果您的项目大小相对较小,您可以选择 Amazon DynamoDB。尽管 Amazon DynamoDB 提供了许多选项来克服行大小限制,但 Apache HBase 能够更好地处理具有最小限制的大型复杂负载。

吞吐量模型

尽管在创建表时指定了读取和写入要求,但 Amazon DynamoDB 允许您增加或减少预置吞吐量以适应负载而无需停机。

在 Apache HBase 中,集群中的节点数量可以由读取和/或写入所需的吞吐量驱动。

一致性模型

Amazon DynamoDB 允许您为应用程序中的每个读取请求指定所需的一致性特征。您可以指定读取是最终一致还是强一致。

最终一致性选项是 Amazon DynamoDB 中的默认选项,可最大限度地提高读取吞吐量。但是,最终一致的读取可能并不总是反映最近完成的写入的结果。所有数据副本的一致性通常在一秒钟内完成。

Apache HBase 读取和写入是强一致的。这意味着对 Apache HBase 中单行的所有读取和写入都是原子的。每个并发的读取器和写入器都可以对行的状态做出安全的假设。Apache HBase 中的多版本控制和时间戳有助于其高度一致的模型。

交易模型

出于性能考虑,Amazon DynamoDB 和 Apache HBase 都不支持多项目/跨行或跨表事务。但是,这两个数据库都提供了用于跨多个表读取和写入多个项目/行的批处理操作,而没有事务保证。

表操作

两个数据库之间的一个关键区别是 Amazon DynamoDB 的灵活预置吞吐量模型。在需要时调高容量并在完成后调低容量的能力对于处理具有不可预测峰值的可变工作负载非常有用。

对于需要高更新率来执行数据聚合或维护计数器的工作负载,Apache HBase 是一个不错的选择。这是因为 Apache HBase 支持多版本并发控制机制,这有助于它的强一致性读写。Amazon DynamoDB 让您可以灵活地根据您的特定工作负载指定是希望您的读取请求最终一致还是高度一致。一秒钟内达到。

资料来源: http ://d0.awsstatic.com/whitepapers/AWS_Comparing_the_Use_of_DynamoDB_and_HBase_for_NoSQL.pdf

于 2015-04-01T02:08:35.087 回答