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

问题描述

  1. 数据库订单表中每个用户的记录有15种状态(12种状态码代表在途状态,3种状态码代表终结状态)。

  2. 数据之间的状态可以进行流转。

  3. 要求同一个用户的在途状态只能有一条记录,终结状态可以有多条记录。

  4. 如何保证数据完整性

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

  1. 代码流程,在插入数据库之前进行数据查询,如果查询出当前用户没有在途状态的数据,则进行插入;如果查询出当前用户有在途状态的数据,则不插入。

  2. 但是在同一个用户并发高的情况下,会出现数据不严谨的情况,这个大家都知道。

  3. 如果是单节点的情况下,可以使用同步(synchronized)的方法解决数据完整性的问题,但是当同步的时候也阻塞了其他所有用户的操作,造成性能低下。


莫回无
浏览 772回答 1
1回答

炎炎设计

1:使用数据库的唯一索引。2:分布式锁。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL