【问题标题】:What is the use of a Hash range in a dynamodb table?dynamodb 表中的哈希范围有什么用?
【发布时间】:2015-03-21 03:18:41
【问题描述】:

我是 dynamodb (ddb) 的新手。我正在浏览它的文档,它说要添加哈希键和哈希范围键。在文档中,它说 ddb 将在哈希键上创建一个排序索引,并在哈希范围上创建一个排序索引。

拥有这 2 把钥匙而不是只有一把钥匙的目的是什么。是不是因为第一个键的使用方式如下: 一个哈希表,其中包含: key - 哈希范围内每个值的键范围

第二个哈希表 哈希范围键 - 实际数据值。

这将有助于隔离数据并加快查找速度。但是为什么只有 2 级 HashMap,我可以对 n 层执行此操作并获得更快的查找。

提前谢谢你。

【问题讨论】:

    标签: hashtable amazon-dynamodb


    【解决方案1】:

    问:“拥有这两个键而不是一个键的目的是什么?”

    数据模型而言,Hash Key 允许您从表中唯一标识一条记录,Range Key 可用于对通常一起检索的多条记录进行分组和排序.示例:如果您要定义一个聚合来存储订单项,则 OrderId 可以是您的 Hash Key,而 OrderItemId 可以是 Range Key。您可以在下面找到使用这两个键的正式定义:

    "Composite Hash Key with Range Key 允许开发者创建一个 主键是两个属性的组合,一个'散列 属性”和“范围属性”。查询复合材料时 key,hash属性需要唯一匹配但是一个范围 可以为范围属性指定操作:例如所有订单 过去 24 小时内来自维尔纳的比赛,或个人参加的所有比赛 过去 24 小时内的玩家。”[VOGELS]

    所以 Range KeyData Model 添加了分组功能,然而,这两个 Key 的使用对 Storage Model:

    "Dynamo 使用一致的散列将其键空间划分为 副本并确保均匀的负载分布。统一的钥匙 分布可以帮助我们实现均匀的负载分布,假设 密钥的访问分布没有高度倾斜。” [DDB-SOSP2007]

    Hash Key不仅可以唯一标识记录,也是保证负载分布的机制。 范围键(使用时)有助于指示将大部分一起检索的记录,因此,也可以针对这种需要优化存储。

    问:“但是为什么只有 2 级 HashMap?我可以对 n 层执行此操作并获得更快的查找。”

    为了在集群环境中有效运行数据库,拥有多层查找会增加指数级复杂性,这是大多数 NOSQL 数据库最重要的用例之一。数据库必须是高度可用的、防故障的、有效可扩展的,并且仍然可以在分布式环境中执行。

    “Dynamo 的关键设计要求之一是它必须可扩展 逐渐地。这需要一种机制来动态分区 系统中节点集(即存储主机)上的数据。 Dynamo 的分区方案依赖于一致性哈希 跨多个存储主机分配负载。”[DDB-SOSP2007]

    这始终是一种权衡,您在 NOSQL 数据库中看到的每一个限制很可能是由存储模型要求引入的。尽管关系数据库在数据建模方面非常灵活,但在分布式环境中运行时存在一些限制。

    选择正确的键来表示您的数据是您设计过程中最关键的方面之一,它直接影响您的应用程序的性能、规模和成本。


    脚注:

    • 数据模型是我们感知和操作数据的模型。它描述了我们如何与数据库中的数据交互 [FOWLER]。换句话说,它是您抽象数据模型的方式、对实体进行分组的方式、选择作为主键的属性等

    • 存储模型描述了数据库如何在内部存储和操作数据 [FOWLER]。尽管您无法直接控制这一点,但您当然可以通过了解数据库内部的工作方式来优化数据的检索或写入方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多