【发布时间】: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