내용으로 건너뛰기

DynamoDB Atomic Counters

0

Greetings!

I have an application that utilizes a DynamoDB table to manage counters. When we update the value of the counter, we consume the returned value - this returned value is the old value of the counter. This counter is then used to retrieve a value in an array, it is effectively an index.

I currently increment these counters with Lambda functions - it's highly likely that many Lambdas may attempt to update the value of a given counter at the same time. It's important that each Lambda function receives a different value of the counter.

Utilizing DynamoDB atomic counters, can I expect that each Lambda function will receive a different value for the counter?

Example:

  • 10 Lambdas attempt to update value of a counter where its current value is 0
  • The Update Expression is "ADD count :incr" where ":incr" is 1
  • Each Lambdas update is processed
  • The returned value from each update is unique per Lambda and the values are 0 - 9
  • The final value of the counter is 10
2개 답변
2

Yes, this is exactly how atomic counters work. You can find more info here

AWS
전문가
답변함 4년 전
AWS
전문가
검토됨 4년 전
0

It is true that with an atomic counter the updates do not interfere with each other. At the same time you must be aware that the updates are not idempotent.

I the case in which the UpdateItem is unsuccessful, and you get a Network Error for example, you can't be sure that your update was executed or not. Then you probably will retry from your lambda function and the possibility of overcounting exists. So you may end up with the final value of your counter greater than 10 in your example.

If that is acceptable, then great! For scenarios where accuracy is important I advice using transaction with a client request token!

답변함 일 년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

관련 콘텐츠