查询后判断结果再进行数据操作,如何在并发情况下既保证性能,也保证数据一致

问题描述

  1. 数据库订单表中每个用户的记录有15种状态(12种状态码代表在途状态,3种状态码代表终结状态)。
  2. 数据之间的状态可以进行流转。
  3. 要求同一个用户的在途状态只能有一条记录,终结状态可以有多条记录。
  4. 如何保证数据完整性

问题出现的环境背景及自己尝试过哪些方法

  1. 代码流程,在插入数据库之前进行数据查询,如果查询出当前用户没有在途状态的数据,则进行插入;如果查询出当前用户有在途状态的数据,则不插入。
  2. 但是在同一个用户并发高的情况下,会出现数据不严谨的情况,这个大家都知道。
  3. 如果是单节点的情况下,可以使用同步(synchronized)的方法解决数据完整性的问题,但是当同步的时候也阻塞了其他所有用户的操作,造成性能低下。

你期待的结果是什么?实际看到的错误信息又是什么?

我期望哪位大神能给出一种比较好的解决方案,比同步(synchronized)的方法好,也能保证数据完整性。

期待!

阅读 2.2k
1 个回答

1:使用数据库的唯一索引。
2:分布式锁。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题