How to support transactions in dynamoDB with javascript aws-sdk?

12,321

Solution 1

  1. You can do atomic updates such as incrementing a number straight on Dynamo without reading, incrementing, updating. For more information see this

  2. Are both updates updating the same field? If so you can add a condition to the update that the old value equal what you read. That way if you try to save the 2nd new value, this condition will fail and it won't perform the 2nd update. See this

Solution 2

Just released at 2018 re:invent, see the native transaction support in javascript sdk usage here: https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-transactions/

Solution 3

Recently there is an npm package that provides implementation of DynamoDb optimistic locking. See Dynameh. You can check that out.

Share:
12,321
ameykpatil
Author by

ameykpatil

Java, Go, Node Programmer. Databases specially NoSQL Addict. Interested and working in Big Data domain. Algorithm Analyst. Amateur programmer in C, C++, Python Web enthusiast, but knows only basics.

Updated on July 28, 2022

Comments

  • ameykpatil
    ameykpatil over 1 year

    We have a microservice written in node.js & we use dynamoDB for data storage. Value is stored in json format against key. In update service call, we fetch value for a key, update the json & save it.

    Recently, we came across a condition where 2 calls wanted to update the value of the same key. So first call read the value, then second call read the value, first call updated & saved, then second updated & saved the value (usual case of race condition), so in this case update by first call did not get reflected in DB.

    To handle this, I researched a bit & came to know about the transaction library of dynamoDB. But it seems that it is not yet in node-js sdk.

    Also, I searched about versioning & optimistic locking but again I did not find a support for this in node-js sdk.

    Is there any update with this? If it's support is not going to come in near future in node-js sdk, what are the other options? What could be the best way to handle this issue?

  • ameykpatil
    ameykpatil about 8 years
    Accepting for the second point "ConditionExpression". This should solve the problem.