Amazon DynamoDB Atomic Writes

时间:2016-01-07 18:46:34

标签: amazon-web-services amazon-dynamodb aws-lambda

我有一个Lambda worker函数列表(比如1000),每个函数同时运行并完成它的工作。为了弄清楚所有工人的最终结果,我想出了这个想法。

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

  • total_number_of_jobs
  • jobs_completed(最初设置为0)

在完成每个Lambda worker函数后,它将继续将属性jobs_completed递增1。然后阅读记录并检查total_number_of_jobs是否等于jobs_completed,如果是,则在SQS中记录。

我的问题是:

  1. 这是个好主意吗?
  2. 更新是否一致且原子化?可能有任何竞争条件吗?
  3. 比这更好的解决方案吗?
  4. 我会在UpdateItem API调用中更新计数器jobs_completed,如下所示:

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

1 个答案:

答案 0 :(得分:2)

只要您使用DynamoDB原子计数器(如示例所示),并检查UpdateItem调用的返回值而不是运行单独的查询,那么您提出的解决方案应该可以正常工作。