假设我在DynamoDB中有一个表,如果我有基于属性的GSI密钥,但是随后我删除或更改了该属性,那么GSI表的行为是什么?它将删除并更改GSI表中的密钥吗?
TableName:MammalTables
分区键:MammalName
属性1:MammalNumberOfLegs
属性1:MammalSize
GSI名称MammalNumberOfLegsGSI
PartitionKey:MammalNumberOfLegs
SortKey:MammalSize
现在假设我有这样的MammalTables数据:
哺乳动物名称:人类,哺乳动物的腿数:2,哺乳动物大小:5
MammalName:狗,MammalNumberOfLegs:4,MammalSize:1
这意味着我的GSI表现在有了
MammalNumberOfLegs:2,MammalSize:5
MammalNumberOfLegs:4,MammalSize:1
如果我将“人类的哺乳动物的大小”更改为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都会增加一行而不是删除/修改现有行?
答案 0 :(得分:2)
DynamoDB使用最终一致的模型异步更新全局二级索引。这意味着,即使在主表上更新了数据,也不会立即将其反映在GSI中。但是,对GSI的更新是一个两步过程,将执行写入操作以删除上一个项目,而另一个写入新项目。所以最后我们将得到
MammalNumberOfLegs:2,MammalSize:2 MammalNumberOfLegs:4,MammalSize:1