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
エキスパート
質問済み 8ヶ月前43ビュー
1回答
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
エキスパート
回答済み 8ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ