@
ajianrelease 乐观锁是假定读取的数据,在写之前不会被更新。适用于数据更新不频繁的场景。
Dynamodb支持乐观锁。
悲观锁也是类似,mysql支持悲观锁。
当你执行select xx from xx where xx for update后,在另一个事务中如果对同一张表再次执行select xx from xx where xx for update,那么第二个事务会一直等到第一个事务结束才会被触发,也就是一直处于阻塞的状态,无法查询。可以看到在数据更新不频繁的时候,悲观锁效率很低。
相反,当数据更新频繁的时候,乐观锁的效率很低,因为基本上每次写的时候都要重复读写两次以上。
根据你的描述,应该使用乐观锁(加一个版本号字段)。
A更新成功之后,ver++
B在尝试更新的时候,发现欲更新的记录的的ver跟数据库对应记录的ver不一致。于是重新读取该记录,也就是A更新之后的记录。
至于重新读取之后是怎样提示用户,就是你UX的设计问题了,跟数据库这边无关。
A的更新是保存到了数据库的。B要再更新,必须基于A的更新之上。