如果将主表中的属性用作GSI中的键,Amazon DynamoDB GSI是否会删除GSI行?

时间:2019-09-13 20:16:08

标签: amazon-dynamodb

假设我在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都会增加一行而不是删除/修改现有行?

1 个答案:

答案 0 :(得分:2)

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

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