【问题标题】:Does Amazon DynamoDB GSI's delete GSI rows if the attribute from the main table is used as the key in the GSI?如果主表中的属性用作 GSI 中的键,Amazon DynamoDB GSI 是否会删除 GSI 行?
【发布时间】:2019-09-14 08:24:10
【问题描述】:

假设我在 DynamoDB 中有一个表,如果我的 GSI 的键基于某个属性,但随后我删除或更改了该属性,那么 GSI 表的行为是什么?它会删除和更改 GSI 表中的键吗?

表名:哺乳动物表
分区键:哺乳动物名称
属性 1:MammalNumberOfLegs
属性1:哺乳动物尺寸


GSI 名称 MammalNumberOfLegsGSI
PartitionKey : MammalNumberOfLegs
排序键:哺乳动物大小


现在假设我有这样的 MammalTables 数据:

哺乳动物名称:人类,哺乳动物数量:2,哺乳动物尺寸:5
MammalName: Dog, MammalNumberOfLegs: 4, MammalSize: 1

这意味着我的 GSI 表现在有

MammalNumberOfLegs:2,MammalSize:5
MammalNumberOfLegs:4,MammalSize:1

如果我将 MammalSize for Human 更改为 2,这是否意味着我的 GSI 中会包含这个?

MammalNumberOfLegs:2,MammalSize:2
MammalNumberOfLegs:4,MammalSize:1

还是加在上面是

MammalNumberOfLegs:2,MammalSize:5
MammalNumberOfLegs:2,MammalSize:2
MammalNumberOfLegs:4,MammalSize:1

我认为这个问题也可以表述为,GSI 的映射是否与原始表在一行的基础上精确地 1-1 映射,或者是否存在 GSI 会创建额外行而不是删除/修改现有行的任何情况?

【问题讨论】:

  • 全局二级索引由 DynamoDB 使用最终一致模型异步更新。这意味着即使在主表上更新了数据,它也不会立即反映在 GSI 中。然而,对 GSI 的更新是一个 2 步过程,将有一个写入操作删除前一个项目,另一个写入新项目。所以最后我们会得到 MammalNumberOfLegs: 2, MammalSize : 2 MammalNumberOfLegs: 4, MammalSize : 1

标签: amazon-dynamodb


【解决方案1】:

全局二级索引由 DynamoDB 使用最终一致模型异步更新。这意味着即使在主表上更新了数据,它也不会立即反映在 GSI 中。然而,对 GSI 的更新是一个 2 步过程,将有一个写入操作删除前一个项目,另一个写入新项目。所以最后我们会得到

MammalNumberOfLegs:2,MammalSize:2 MammalNumberOfLegs:4,MammalSize:1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多