DynamoDB updateItem

0

【以下的问题经过翻译处理】 我在想如果很多客户端尝试在同时更新同一项中的不同属性,会发生什么。

例如:

1°Case:

{
"PK": "PK1",
"SK": "SK1",
"Attr1: "Value1",
"Attr2: "Value2"
}

一个客户端同时更新“Attr1”,第二个客户端同时更新“Attr2”。

2°Case:

{
"PK": "PK1",
"SK": "SK1",
"Attr1: {
      "SubAttr1": "SubValue1",
      "SubAttr2: "SubValue2"
     }
}

一个客户端同时更新“SubAttr1”,第二个客户端同时更新“SubAttr2”。

这些更新可以通过AppSync解析器完成。

谢谢。

profile picture
EXPERTE
gefragt vor 8 Monaten44 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 DynamoDB 采用一种称为乐观锁定的技术来处理并发更新。当多个客户端尝试同时更新同一项时,DynamoDB 确保最后一次写入不会忽略之前的更改而覆盖先前的写入。

第一种情况:当一个客户端同时更新"Attr1" 和另一个客户端更新 "Attr2" 时,这些更新将被视为独立的操作。DynamoDB会合并这些更新并将它们应用于项目而不相互覆盖。因此,两个更新都将成功,最终项目将对 "Attr1" 和 "Attr2" 的更新值。

第二种情况:当一个客户端同时更新"SubAttr1" 和另一个客户端更新 "SubAttr2" 时,这些更新也将被视为独立的操作。然而,由于正在更新的属性嵌套在同一父属性"Attr1" 中,必须使用适当的 DynamoDB 表达式来更新嵌套属性。

使用 UpdateExpression 和"SET" 操作以及适当的文档路径来更新嵌套属性:

UpdateExpression: "SET Attr1.SubAttr1 = :newSubAttr1, Attr1.SubAttr2 = :newSubAttr2"

这将确保仅更新指定的子属性,而在过程中不会丢失任何数据。

在使用 AppSync 解析器时,同样适用相同原理。您需要在 VTL(Velocity 模板语言)脚本中使用正确的映射模板来更新 DynamoDB 中的嵌套属性。这将确保正确处理对不同子属性的并发更新,而不会覆盖或丢失数据。

profile picture
EXPERTE
beantwortet vor 8 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen