【问题标题】:DynamoDB partition keyDynamoDB 分区键
【发布时间】:2021-03-20 03:55:04
【问题描述】:

我在 DynamoDb 中有一个属性 ObjectIdentifier,其值的格式为

{"Id":"testId","Version":"2020-09-03t16:29:51"}

我需要使用 Id+Version 为 GSI 创建分区键。由于 DynamoDb 提到只有字符串、二进制和数字类型可以用作分区键,是否可以创建和使用这样的键?

【问题讨论】:

    标签: nosql amazon-dynamodb partition


    【解决方案1】:

    您可以在 DynamoDB 的限制范围内将所需的任何数据放入分区键中。听起来您想要自动设置Id+Version 的东西,这是不可能的,但是,您可以做的是创建一个将作为分区键的字段并将值设置为字段。您的数据可能看起来像这样(我使用管道来分隔值)。

    {
      "pk": "testId|2020-09-03t16:29:51",
      "ObjectIdentifier": {
        "Id": "testId",
        "Version": "2020-09-03t16:29:51"
      }
    }
    

    在此示例中,pk 将是分区键。该值不是为您计算的,您必须自己计算。

    【讨论】:

    • 即使我形成了分区键pk,如何在创建索引时将其设置为分区键?像ObjectIdentifier.pk 这样的东西有用吗?
    • 我想我有点误解了你的数据。我要修改我的答案。
    • @zinngg 澄清一下,您是在谈论在基表中执行此操作还是在创建 GSI 时执行此操作?
    • 我不是在建议其中之一。我不知道您需要什么访问模式。我只是为您提供一种方法来获得由两个值组合而成的分区键。如果这需要作为表键,则将 pk 设置为表上的分区键。如果您需要一个将其作为分区键的 GSI,则将 pk 设置为表上的分区键。
    • @kirk 我在谈论创建 GSI 时。为了清楚起见,已更新问题。
    【解决方案2】:

    如果我正确理解您的问题,听起来您有一个包含以下内容的现有表格:

    • 一些分区键
    • 一个名为 ObjectIdentifier 的属性,属于 Map 类型
    • 可能还有其他一些属性。

    您在问是否可以在此表上创建一个 GSI,其中 ObjectIdentifier(Map 类型)将是新索引的分区键。

    不,这是不可能的。

    正如您所提到的,分区键只能是字符串、二进制或数字类型。可以使用属性名称 ObjectIdentifier 创建字符串类型的 GSI;但是,在创建 GSI 之前已经在表中的项目将不会插入到 GSI 中,因为它们没有名为 ObjectIdentifier 的 String 类型的属性。请参阅下面的测试/示例。

    表格视图:

    在 String ObjectIdentifier 上创建 GSI 后的 GSI 视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2016-08-08
      • 2018-01-16
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多