【问题标题】:AWS Dynamo db, choosing keyAWS Dynamodb,选择密钥
【发布时间】:2018-09-23 02:55:29
【问题描述】:

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

我的读取操作主要是获取某个客户的发票。

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    第 1 点:假设是正确的

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

    我提出的解决方案:-

    由于您的用例需要通过发票 id 获取数据,Invoice id 为 分区键是最好的方法。

    发票 ID - 分区键

    如果您有另一个用例来获取client id 的所有发票,您可以使用

    创建 GSI(全球二级索引)

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

    GSI

    重要提示:-

    在 DynamoDB 表中,每个键值都必须是唯一的。然而,关键 全局二级索引中的值不需要是唯一的。

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

    另一点很重要,GSI 将花费您。仅当您有使用案例时才创建 GSI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2022-11-17
      • 2019-06-22
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多