Amazon dynamodb 我是否应该始终使用哈希和范围主键类型创建DynamoDB表?

Amazon dynamodb 我是否应该始终使用哈希和范围主键类型创建DynamoDB表?,amazon-dynamodb,Amazon Dynamodb,在文档()中,它指出: 只能查询主键为哈希和范围类型的表 及 我们建议您设计应用程序,以便主要使用查询操作,并仅在适当的情况下使用扫描 虽然没有直接说明,但这是否是使用散列和范围主键的最佳实践 编辑: 回答TL;DR:使用对您的数据模型有意义的主键类型,并使用辅助索引以获得更好的查询支持 参考资料: 不一定。最好选择一个支持用例访问模式的主键 例如,假设您想要为用户创建一个表。您将存储单个用户的详细信息(姓名、电子邮件、创建者等)。您的访问模式可能是获取特定用户的详细信息。在这种情况下,使

在文档()中,它指出:

只能查询主键为哈希和范围类型的表

我们建议您设计应用程序,以便主要使用查询操作,并仅在适当的情况下使用扫描

虽然没有直接说明,但这是否是使用散列和范围主键的最佳实践

编辑:

回答TL;DR:使用对您的数据模型有意义的主键类型,并使用辅助索引以获得更好的查询支持

参考资料:


不一定。最好选择一个支持用例访问模式的主键

例如,假设您想要为用户创建一个表。您将存储单个用户的详细信息(姓名、电子邮件、创建者等)。您的访问模式可能是获取特定用户的详细信息。在这种情况下,使用hash类型的主键和userId类型的散列键更有意义

假设您还需要另一个存储组的表。您的访问模式可能是希望获取给定组的所有成员。在这里,使用类型为散列和范围的主键更有意义,散列和范围键分别为groupIduserId

需要了解的重要事项包括(以下引用)和:

  • 散列类型主键-主键由一个属性组成,即散列属性。DynamoDB在此基础上构建无序散列索引
    主键属性。表中的每个项目都是唯一标识的
    通过其散列键值

  • 散列和范围类型主键-主键由两个属性组成。第一个属性是散列属性,第二个属性是
    一个是范围属性。DynamoDB构建无序散列索引
    在哈希主键属性上,以及在 范围主键属性。表中的每个项目都是唯一的
    由其哈希值和范围键值的组合标识。它是 两个项目可能具有相同的哈希键值,但这两个 项目必须具有不同的范围键值


您可以在Dynamo DB中看到更多关于最佳实践的信息。选择使用哪个键取决于特定场景的用例和数据需求。例如,如果要存储用户会话数据,则使用范围键可能没有多大意义,因为每个记录都可以由GUID引用并直接访问,而无需分组要求。一般来说,一旦知道会话Id,就可以通过键查询特定项。另一个例子可能是存储用户帐户或配置文件数据,每个用户都有自己的帐户或配置文件数据,您很可能会直接访问它(通过用户Id或其他方式)

但是,如果要存储订单项,则范围键更有意义,因为您可能希望检索按顺序分组的项

就数据模型而言,哈希键允许您从表中唯一标识一条记录,范围键可以选择性地用于对通常一起检索的多条记录进行分组和排序。示例:如果要定义用于存储订单项的聚合,则订单Id可以是散列键,OrderItemId可以是范围键。每当您想从特定订单中搜索订单项时,只需通过哈希键(订单Id)进行查询,就可以得到所有订单项

您可以在下面找到使用这两个键的正式定义:

“带范围键的复合哈希键允许开发人员创建 主键是两个属性的组合,一个“哈希” 属性“”和“范围属性”。在查询组合时 键,哈希属性需要唯一匹配,但必须是一个范围 可以为范围属性指定操作:例如,所有订单 在过去24小时内从沃纳,或由个人玩的所有游戏 过去24小时内的玩家。”

因此,范围键为数据模型添加了分组功能,但是,这两个键的使用也会对存储模型产生影响:

“Dynamo使用一致散列将其密钥空间划分为多个分区 复制副本并确保均匀的负载分布。一个统一的密钥 分布可以帮助我们实现均匀的载荷分布 密钥的访问分布不是高度倾斜的。”

哈希键不仅允许唯一标识记录,而且是确保负载分布的机制。范围键(使用时)有助于指示将主要一起检索的记录,因此,还可以针对这种需要优化存储

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


脚注:

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

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


正如其他人所说,不,你不应该这样做

一开始让你困惑并提出这个问题的陈述是错误的:

您只能查询其