据说 update dynamo db 时可以自动防止并发(在短时间内),这个是叫什么机制?
还有一种是乐观锁:
从数据库里获取一个 record,record 里有 version,把 version+1,update 到 db(如果失败,重新 get,version+1,update)。
如果不这样做,就可能会有并发的问题。
并发就是说,2 个线程 update 同一个 booking,第二次更新,会把第一次更新的冲掉。
是的,那个应该是用在有 read+ write 的情况,如果你不处理的话,会有 race condition
我们用的 UpdateItem, 从我们的角度看是不存在 race condition 的,并发是可能存在的,但是要么 A 先写完,要么 B 先写完,但是不会存在写出错误 data 的情况
通常一个 field 的修改都是来自一个 event source,因为 Kinesis 的存在,这些修改的顺序性是可以保证的,并且也基本上不会对同一个 booking 有并发操作
来自不同 source 的 event 通常修改的 field 也不一样,所以他们的顺序性并没有那么严格的要求
updateItem这个API,ddb内部会自主地维持操作的原子性,会有个自增序列。你可以看看这个文档里的Atomic counters。https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html
就是说ddb自己有一个queue,当数据都来的时候,保证有序
https://stackoverflow.com/questions/66072033/dynamodb-update-item-at-a-same-time
有可能 dynamo db 是 partition 的,但是所以的 update 实际都会落到同一个 node 上,在一个 queue 里,不会parallel 执行,是 one by one 执行。
其实我觉得这个关于乐观锁的可能更相关一些:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html
转载请注明:牛哥678 » Update Dynamo db