AWS Dynamodb,排序键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Dynamodb,排序键相关的知识,希望对你有一定的参考价值。

我使用dynamo db存储客户发票,其中每张发票都有自己的唯一标识符invoiceId

我的阅读操作主要是为某个客户开具发票。

1-如果我使用invoiceId作为分区键,同一客户端的发票可能会被写入不同的分区。这个假设是正确的,如果我应该担心吗?

2-另一种情况是使用客户端ID作为分配密钥(尽可能为分区中的同一客户端分组发票),并使用invoiceId作为排序密钥。这是一种正确的方法还是有更好的方法来处理这种情况?

我来自关系数据库背景,使用复合主键,其中一个组件冗余似乎很奇怪。

答案

第1点:假设是正确的

第2点:它可能不是最佳方法,因为Dynamodb仅允许对分区键进行查询操作。如果您不知道分区键,则需要扫描(昂贵的操作 - 不推荐)表或创建GSI。

我建议的解决方案: -

由于您的用例需要通过Invoice id获取数据,因此将Invoice id作为分区键是最佳方法。

发票ID - 分区键

如果您有另一个用例来获取client id的所有发票,您可以创建GSI(全球二级索引)

客户端ID - 分区密钥 发票ID - 排序键

GSI

重要的提示:-

在DynamoDB表中,每个键值必须是唯一的。但是,全局二级索引中的键值不必是唯一的。

您可以分别查询主表和GSI以了解您的用例。有关详细信息,请阅读有关GSI的信息。

另一个重要的一点,GSI将花费你。仅当您有一个用例时才创建GSI。

以上是关于AWS Dynamodb,排序键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS Lambda 按名称查询 dynamoDB 表

AWS dynamoDB按日期查询

带有键条件表达式的 AWS DynamoDB 查询出错:不支持查询键条件

DynamoDB 流 和 AWS Lambda 触发器

过滤 AWS DynamoDB 中的映射对象

时间戳范围之间的 AWS Appsync 订阅过滤器