修改 DynamoDB 中的对象,而不会与 Lambda 函数发生冲突

问题描述 投票:0回答:1

我有这个接口的示例对象:

interface Car{
id: Number;
name: String;
tires: Wheel[]
}

interface Wheel{
id: Number;
name: String;
radius: Number;
}

我需要将这些汽车对象存储在 DynamoDB 中,并希望通过 AWS API-Gateway 调用的 AWS Lambda 函数访问和修改它们。 IE。添加车轮、修改车轮、添加新车等,多个用户通过 API 并行执行这些操作。据我所知,没有任何类似 ORM 的东西可以帮助我。我假设我会将根对象汽车及其所有子对象存储为记录。

据我所知,我必须从 dynamoDB 获取整个对象,在 lambda 函数中更改它并在 dynamoDB 中替换它。但是,如果两个用户同时对一个对象进行两个单独的更改,他们会相互覆盖,并且某些更改会丢失吗? 如何确保并行编辑对象而不会有丢失更改的危险?

typescript aws-lambda amazon-dynamodb aws-api-gateway
1个回答
0
投票

UpdateItem API 仅更新插入,从不覆盖。因此,如果每个用户调用 UpdateItem,则该项目的最终图像将包含所有用户更新,不会丢失任何内容,也不会覆盖任何内容。

如果您要求先读取项目,然后进行更新,那么您需要乐观锁定,这很容易使用条件表达式来实现,或者如果您在 Java 或 .Net 中使用一些更高级别的客户端,那么它会使用自动内置注释。

© www.soinside.com 2019 - 2024. All rights reserved.