【发布时间】:2022-01-18 06:12:17
【问题描述】:
我有一个 DynamoDB“My_Table”,索引在“lock_status”上:
{
my_pk: string,
lock_status: string,
useful_data: string,
}
两个不同的线程可以在同一条记录上执行下面的更新代码吗?
本质上,我希望只有一个线程可以访问任何给定记录的“有用数据”。为此,我在线程处理此项目时通过 lockStatus “锁定”记录。我担心的是两个线程同时执行这段代码。他们都根据“ConditionExpression”找到相同的记录并锁定相同的记录。
const client = new AWS.DynamoDB.DocumentClient();
return await client.update({
TableName: 'My_Table',
Limit: 1,
UpdateExpression: 'set lockStatus = :status_locked',
ConditionExpression: 'lockStatus <> :status_available',
ExpressionAttributeValues: {
':status_locked': 'LOCKED',
':status_available': 'AVAILABLE',
},
ReturnValues: 'ALL_NEW',
}).promise();
如果我使用 TransactWriteItem,这似乎可以避免这个问题,但是我可以在我的简单场景中使用简单更新吗?
【问题讨论】:
标签: amazon-web-services transactions amazon-dynamodb acid