问题描述
- 数据库订单表中每个用户的记录有15种状态(12种状态码代表在途状态,3种状态码代表终结状态)。
- 数据之间的状态可以进行流转。
- 要求同一个用户的在途状态只能有一条记录,终结状态可以有多条记录。
- 如何保证数据完整性
问题出现的环境背景及自己尝试过哪些方法
- 代码流程,在插入数据库之前进行数据查询,如果查询出当前用户没有在途状态的数据,则进行插入;如果查询出当前用户有在途状态的数据,则不插入。
- 但是在同一个用户并发高的情况下,会出现数据不严谨的情况,这个大家都知道。
- 如果是单节点的情况下,可以使用同步(synchronized)的方法解决数据完整性的问题,但是当同步的时候也阻塞了其他所有用户的操作,造成性能低下。
你期待的结果是什么?实际看到的错误信息又是什么?
我期望哪位大神能给出一种比较好的解决方案,比同步(synchronized)的方法好,也能保证数据完整性。
期待!
1:使用数据库的唯一索引。
2:分布式锁。