本文目录导读:
图片来源于网络,如有侵权联系删除
原因与影响
在现代计算机系统中,并发操作是一种常见的现象,多个进程或线程同时对共享数据进行操作,虽然提高了系统的效率和资源利用率,但也带来了数据不一致性的风险,以下是并发操作可能导致数据不一致性的一些主要原因。
丢失修改
1、场景描述
- 假设有两个事务T1和T2同时对数据库中的一个数据项A进行操作,T1读取A的值为10,然后进行修改,将A的值加1变为11,T2也读取A的值为10,然后将A的值减1变为9,如果没有适当的并发控制机制,T2对A的修改会覆盖T1对A的修改,最终A的值为9,而不是按照顺序执行应得到的11。
2、影响
- 在实际应用中,例如在库存管理系统中,如果有两个并发的销售操作对同一商品的库存数量进行修改,丢失修改可能导致库存数量错误,可能会出现超售的情况,影响企业的正常运营,损害企业的声誉并且可能导致财务损失。
图片来源于网络,如有侵权联系删除
不可重复读
1、场景描述
- 事务T1在执行过程中需要多次读取数据项A的值,在T1第一次读取A的值为10之后,事务T2对A进行了修改并提交,将A的值更新为20,当T1再次读取A的值时,得到的是20,而不是第一次读取的10,这种在一个事务内多次读取同一数据项得到不同结果的现象称为不可重复读。
2、影响
- 在金融交易系统中,如果一个事务负责计算某个账户在一段时间内的平均余额,由于不可重复读问题,在事务计算过程中,账户余额可能被其他并发事务修改,导致计算出的平均余额不准确,这可能会影响到对账户风险评估、利息计算等相关操作的准确性,进而影响金融机构对客户的服务质量和风险管理能力。
读“脏”数据
1、场景描述
- 事务T1修改了数据项A的值为20,但尚未提交,此时事务T2读取了A的值20,如果之后T1由于某种原因回滚,将A的值恢复到原来的值10,那么T2读取到的20就是“脏”数据,因为这个数据是一个未被最终确定(未提交)的数据。
图片来源于网络,如有侵权联系删除
2、影响
- 在航空订票系统中,假设有一个事务T1正在处理机票预订操作,它暂时将某航班的剩余票数修改为较少的值(但未提交),事务T2读取到这个临时修改后的剩余票数并向客户显示,如果T1后来回滚(例如由于支付失败等原因),而T2已经根据这个“脏”数据告知客户机票数量紧张,这就会给客户带来误导,同时也可能影响航空公司的票务销售策略和客户满意度。
为了避免并发操作带来的数据不一致性,数据库管理系统和其他涉及共享数据处理的系统采用了多种并发控制技术,如封锁、时间戳、乐观并发控制等,这些技术通过限制并发事务对共享数据的访问方式,确保数据的一致性、完整性和准确性,从而保障系统的正确运行。
评论列表