在已有生产DynamoDB表启用乐观锁:DynamoDBVersionAttribute疑问
DynamoDB已有表启用乐观锁的相关问题解答
现有数据项的Version值初始状态
- 已存在的数据项不会自动被分配Version值,这些项的version字段会保持为null,DynamoDB不会主动为存量数据填充版本号,除非你手动执行更新操作。
生产已有数据时updateItem()的工作逻辑
当你对存量数据(version为null)执行updateItem操作时:
- 如果更新请求未指定版本号条件(不依赖乐观锁逻辑),更新会正常执行:
- 实体类中存在version属性的情况下,SDK默认会自动将version字段设置为1,同时完成数据更新。
- 后续再对该数据执行更新时,必须携带当前的version值,否则会触发
ConditionalCheckFailedException,更新失败——这就是乐观锁的生效逻辑。
- 如果更新请求指定了版本号条件(比如期望version为null),更新会成功,并且同样会将version设置为1。
首次UpdateItem操作对null版本值的处理
是的,首次对version为null的存量数据执行UpdateItem操作时,DynamoDB SDK会自动将version字段设置为1,同时完成你指定的数据更新。之后该数据的所有后续更新都必须携带当前有效的version值,才能通过乐观锁校验。
内容的提问来源于stack exchange,提问作者Sachin Kariyattin
相关产品推荐
相关产品推荐

