【问题标题】:Creating a new index in DynamoDB with existing data使用现有数据在 DynamoDB 中创建新索引
【发布时间】:2020-10-22 17:38:56
【问题描述】:

我有一个疑问。例如,我在 DynamoDB 表上创建一个索引并插入三个元素。现在我的索引看起来像这样:

现在我使用表中的三个元素在 DynamoDB 上创建一个新索引,如下所示:

我看到的是以下问题(我的理论):

第一个索引的大小有三个项目,但第二个索引没有三个元素。我做了这个测试,因为我有一个包含 1500 万个项目的表,需要重新创建或添加新索引。问题是,如果索引没有表中已经存在的元素,这意味着如果我的应用程序使用新索引,则只能在创建索引后找到新的插入。

问题是:

  • 我的理论正确吗?
  • 有没有办法用已经存在的数据填充新索引?

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

    我认为你的理论是错误的:

    Backfilling: For each item in the table, DynamoDB determines which set of attributes to write to the index based on its projection (KEYS_ONLY, INCLUDE, or ALL). It then writes these attributes to the index. 发件人:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.OnlineOps.html#GSI.OnlineOps.Creating

    在创建表后创建全局索引不会导致数据丢失。但是稀疏索引可能会导致这种情况。 举个例子:

    假设您有一个主键 = 电子邮件的表,并且您创建了一个以主键作为区域的全局索引(即使在插入一些数据之后)。

    Item_1 : { email: test@test.com, region: USA} 将被插入到您的表和 GSI 中

    Item_2 : { email: test@test.com, age: 21} 将仅插入到您的表中

    其实这是一个非常有用的功能,你可以在这里了解更多 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general-sparse-indexes.html

    【讨论】:

    • 根据您所说的和文档所说的,GSI 将仅包含项目包含主键或排序键属性的项目。我唯一担心的是我不知道为什么新索引的大小是 0kb。假设它应该已经填充了具有主键和排序键的项目,但我没有看到它反映在索引选项卡中。
    • 您确定属性值的数据类型与索引键架构数据类型的数据类型匹配吗?
    • 是的,那场比赛。我将等待六个小时,因为我看起来亚马逊每隔那个时间间隔更新一次信息。如果我的索引改变大小,我会接受你的回答:)!
    猜你喜欢
    • 2022-07-05
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2017-11-10
    • 2019-06-02
    相关资源
    最近更新 更多