Amazon DynamoDB 原子写入

Amazon DynamoDB Atomic Writes

我有一个 Lambda 辅助函数列表(比如 1000 个),每个 运行 同时执行其工作。为了能够计算出所有工人的最终结果,我想出了这个主意。

在开始作业和生成 Lambda 工作函数之前,我在 DynamoDB 中保存了一条记录,例如两个属性:

在每个 Lambda 工作函数完成时,它将去并将属性 jobs_completed 递增 1。然后读取记录并检查total_number_of_jobs是否等于jobs_completed,如果是,则在SQS中放入一条记录。

我的问题是:

  1. 这是个好主意吗?
  2. 更新是否一致且原子化?会不会有竞争条件?
  3. 还有比这更好的解决方案吗?

我会在 UpdateItem API 调用中更新计数器 jobs_completed,如下所示:

SET jobs_completed = jobs_completed + :incr_by 其中 incr_by 等于 1.

只要您使用 DynamoDB 原子计数器,就像您的示例所示,并且您检查 UpdateItem 调用的 return 值而不是 运行 一个单独的查询,那么您建议的解决方案应该有效很好。