【问题标题】: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 Key 为 Data Model 添加了分组功能,然而,这两个 Key 的使用对 Storage Model:
"Dynamo 使用一致的散列将其键空间划分为
副本并确保均匀的负载分布。统一的钥匙
分布可以帮助我们实现均匀的负载分布,假设
密钥的访问分布没有高度倾斜。”
[DDB-SOSP2007]
Hash Key不仅可以唯一标识记录,也是保证负载分布的机制。 范围键(使用时)有助于指示将大部分一起检索的记录,因此,也可以针对这种需要优化存储。
问:“但是为什么只有 2 级 HashMap?我可以对 n 层执行此操作并获得更快的查找。”
为了在集群环境中有效运行数据库,拥有多层查找会增加指数级复杂性,这是大多数 NOSQL 数据库最重要的用例之一。数据库必须是高度可用的、防故障的、有效可扩展的,并且仍然可以在分布式环境中执行。
“Dynamo 的关键设计要求之一是它必须可扩展
逐渐地。这需要一种机制来动态分区
系统中节点集(即存储主机)上的数据。
Dynamo 的分区方案依赖于一致性哈希
跨多个存储主机分配负载。”[DDB-SOSP2007]
这始终是一种权衡,您在 NOSQL 数据库中看到的每一个限制很可能是由存储模型要求引入的。尽管关系数据库在数据建模方面非常灵活,但在分布式环境中运行时存在一些限制。
选择正确的键来表示您的数据是您设计过程中最关键的方面之一,它直接影响您的应用程序的性能、规模和成本。
脚注: