我想在Dynamodb中实现自我增量功能like mysql。经过一些搜索之后,我只能将updateItem与{ ":inc": {N: "1"} }这样的更新表达式一起使用。但它只适用于更新现有项目。我想要实现的是,每当我们在dynamodb上插入一个新项时,将version字段加1。
dynamodb中有没有内置的特性来实现这一点?
发布于 2020-08-09 00:18:06
DynamoDB没有自动递增计数功能,您必须自己实现它。
您可以在事务中处理此问题,在该事务中,您将一个新项插入到DDB中,然后将version字段递增1。这种方法的副作用是,确保只有在PutItem操作成功时,版本才会增加。当您在PutItem调用中包含ConditionExpression以强制执行任何其他业务逻辑时,这将非常有用。如果条件失败,version将不会递增。
您可以更进一步,实现一种称为光学锁定的策略。您应该在调用updateItem之前读取version字段。在对updateItem的调用中,您将使用conditionExpression来确保数字符合您的期望。如果另一个进程更新了版本,则条件检查将失败,您的updateItem也将失败。您可以再次尝试该操作,直到获得预期的结果。
有关乐观锁定的更多信息:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html
https://stackoverflow.com/questions/63310456
复制相似问题