我是dynamodb(ddb)的新手。我正在阅读它的文档,并说它添加了Hash Key和Hash Range键。在文档中,它说ddb将在哈希键上创建一个usorted索引,在哈希范围上创建一个排序索引。
拥有这两个键的目的是什么,而不仅仅是一个键。是因为第一个键使用如下: 一个HashTable包含: key - 散列范围中每个值的键范围
2nd HashTable 哈希范围键 - 实际数据值。
这有助于隔离数据并快速查找。但是为什么只有2级HashMaps,我可以为n个层执行此操作并获得更快的查找。
提前谢谢你。
答案 0 :(得分:2)
问:"拥有这2个密钥而不只是一个密钥的目的是什么?"
就数据模型而言,哈希键允许您从表中唯一标识记录,并且可以选择使用范围键对通常一起检索的多个记录进行分组和排序。示例:如果要定义聚合以存储订单项,则OrderId可以是哈希键,OrderItem可以是范围键。您可以在下面找到使用这两个密钥的正式定义:
"带有范围键的复合哈希键允许开发人员创建 主键是两个属性的组合,一个'哈希 属性'和'范围属性。'查询复合时 key,hash属性需要唯一匹配但是范围 可以为范围属性指定操作:例如所有订单 来自Werner过去24小时,或所有由个人玩的游戏 过去24小时内的玩家。" [VOGELS]
因此 Range Key 为数据模型添加了分组功能,但是,这两个密钥的使用也对存储模型<有影响< / EM>:
&#34; Dynamo使用一致的散列来划分其密钥空间 复制品并确保均匀的负荷分布。统一的钥匙 分布可以帮助我们实现均匀的负荷分配 密钥的访问分配没有高度倾斜。&#34; [DDB-SOSP2007]
不仅哈希密钥允许唯一标识记录,而且还是确保负载分配的机制。 Range Key (使用时)有助于指示主要一起检索的记录,因此,存储也可以根据需要进行优化。
问:&#34;但是为什么只有2级HashMaps?我可以为n个层执行此操作并获得更快的查找。&#34;
具有多层查找将增加指数复杂性,以便在群集环境中有效地运行数据库,这是大多数NOSQL数据库最重要的用例之一。数据库必须高度可用,防故障,可有效扩展,并且仍然可以在分布式环境中执行。
&#34; Dynamo的一个关键设计要求是它必须扩展 增量。这需要一种动态分区的机制 系统中的节点集(即存储主机)上的数据。 Dynamo的分区方案依赖于一致的散列 将负载分配到多个存储主机。&#34; [DDB-SOSP2007]
它始终是一种权衡,您在NOSQL数据库中看到的每一个限制都很可能是由存储模型要求引入的。尽管关系数据库在数据建模方面非常灵活,但在分布式环境中运行时它们有一些限制。
选择正确的密钥来表示您的数据是设计过程中最关键的方面之一,它直接影响您的应用程序的性能,规模和成本。
脚注:
数据模型是我们感知和操纵数据的模型。它描述了我们如何与数据库中的数据进行交互[FOWLER]。换句话说,就是你如何抽象你的数据模型,你对实体进行分组的方式,你选择作为主键的属性等等。
存储模型描述了数据库如何在内部存储和操作数据[FOWLER]。虽然您无法直接控制它,但您可以通过了解数据库内部的工作方式来优化数据的检索或写入方式。