数据并发的问题

一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库。数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏数据的完整性。这些问题可以归结为5类,包括3类数据读问题(脏读、不可重复读和幻象读)以及2类数据更新问题(第一类丢失更新和第二类丢失更新)。下面,我们分别通过实例讲解引发问题的场景。

  • 脏读(Dirty read)
    A事务读取B事务尚未提交的更改数据,并在这个数据的基础上操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。来看取款事务和转账事务并发时引发的脏读场景:

    在这个场景中,B希望取款500元而后又撤销了动作,而A往相同的账户中转账100元,就因为A事务读取了B事务尚未提交的数据,因而造成账户白白丢失了500元。在Oracle数据库中,不会发生脏读的情况。
  • 不可重复读(Unrepeatable read)
    不可重复读是指A事务读取了B事务已经提交的更改数据。假设A在取款事务的过程中,B往该账户转账100元,A两次读取账户的余额发生不一致:


    在同一事务中,T4时间点和T7时间点读取账户存款余额不一样。
  • 幻象读(Phantom read)
    A事务读取B事务提交的新增数据,这时A事务将出现幻象读的问题。幻象读一般发生在计算统计数据的事务中,举一个例子,假设银行系统在同一个事务中,两次统计存款账户的总金额,在两次统计过程中,刚好新增了一个存款账户,并存入100元,这时,两次统计的总金额将不一致:

    如果新增数据刚好满足事务的查询条件,这个新数据就进入了事务的视野,因而产生了两个统计不一致的情况。
    幻象读和不可重复读是两个容易混淆的概念,前者是指读到了其他已经提交事务的新增数据,而后者是指读到了已经提交事务的更改数据(更改或删除),为了避免这两种情况,采取的对策是不同的,防止读取到更改数据,只需要对操作的数据添加行级锁,阻止操作中的数据发生变化,而防止读取到新增数据,则往往需要添加表级锁——将整个表锁定,防止新增数据(Oracle使用多版本数据的方式实现)。
  • 第一类丢失更新
    A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来:

    A事务在撤销时,“不小心”将B事务已经转入账户的金额给抹去了。
  • 第二类丢失更新
    A事务覆盖B事务已经提交的数据,造成B事务所做操作丢失:

    面的例子里由于支票转账事务覆盖了取款事务对存款余额所做的更新,导致银行最后损失了100元,相反如果转账事务先提交,那么用户账户将损失100元。
时间: 2024-09-20 03:39:23

数据并发的问题的相关文章

DataSet的数据并发异常处理

数据|异常处理 摘要:ADO.NET为提高数据密集型(data-intensive)应用程序的性能.简化这类程序的建立过程提供了多种技术.数据集(DataSet)作为ADO.net对象模型的标志,作为一个微型的.不连接(disconnected)的数据源的副本提供服务.虽然使用数据集通过减少对数据库服务器的高花费的访问而提高了性能,但是它也带来了多个用户试图同时访问相同数据的可能性,由此引起数据并发性异常(data concurrency exception).本文调查了数据并发性异常背后的通常

HTAP数据库 PostgreSQL 场景与性能测试之 24 - (OLTP) 物联网 - 时序数据并发写入(含时序索引BRIN)

标签 PostgreSQL , HTAP , OLTP , OLAP , 场景与性能测试 背景 PostgreSQL是一个历史悠久的数据库,历史可以追溯到1973年,最早由2014计算机图灵奖得主,关系数据库的鼻祖Michael_Stonebraker 操刀设计,PostgreSQL具备与Oracle类似的功能.性能.架构以及稳定性. PostgreSQL社区的贡献者众多,来自全球各个行业,历经数年,PostgreSQL 每年发布一个大版本,以持久的生命力和稳定性著称. 2017年10月,Pos

java 并发问题-怎么处理数据并发问题

问题描述 怎么处理数据并发问题 在java中怎么处理数据并发的问题,用是技术框架比较合适求指点. 解决方案 Java并发编程系列 解决方案二: 并发分为两个层次,一个是同一个计算机上的并行计算,一个是分布式群集上负载均衡. 前者是编程语言去解决的,后者需要完整的一套技术堆栈. 如果你需要这样的设计,最好完整而系统地设计,而不是草率地看几篇文章就蛮干. 解决方案三: 没有数据合并的话用锁就可以,有数据合并的话要设置唯一的主键 解决方案四: 使用线程和lock技术 解决方案五: java处理高并发时

求怎么查看Mysql数据并发(详细点!谢谢)

问题描述 想知道数据并发是多少(详细点,) 解决方案

Oracle数据并发和一致性简介

整理自Oracle 11g R2 官方文档<concepts> 001 简介     在单用户的数据库中,用户可以修改数据,而不用担心其它用户在同一时间修改相同的数据.但是,在一个多用户的数据库中,多个事务内的语句可以同时更新相同的数据.同时执行的多个事务必须产生有意义且一致的结果.因此,多用户数据库必须提供以下功能:     ·数据并发性:确保多个用户可以同时访问数据     ·数据一致性:确保每个用户看到数据的一致的视图,包括可以看到用户自己的事务所做的更改,和其它用户已提交的事务所做的更

浅谈ADO.NET文章系列之二 — 并发更新冲突的处理

ado 声明:这里只对并发冲突做简单的分析,所以在前面冠以"浅谈"二字,希望大家可以从中看到一般的处理方法和注意的事项,如果有什么疏漏,那也相当地自然,毕竟本人水平有限,还有很多需要提高的地方,希望各位朋友不吝指正!一.为什么会产生并发在我们使用ado.net对数据库中数据进行操作时,很有可能这种操作或类似地操作也在网络内其他用户中进行着,那么就难以避免地会遇到更新操作失败的情况.因为为了更好地提高性能,ado.net采用了断开连接的方式.也就是说要先把数据的副本读取到客户端,那么也容

全新版本MongoDB数据存储席卷物联网

本文首先对物联网进行了模型抽象,着重和大家剖析了MongoDB解决方案,包括文档模型.高可用复制集.分片集群和Aggregation&MapReduce,最后分享了全新的MongoDB特性. 以下为内容整理: MongoDB是文档型数据库,其核心的三大优势是灵活文档模型 .高可靠复制集. 高可扩展分片集群.在最新的 DB Engine Rank 的排名中,MongoDB 排在第4,是非关系型数据库领域的领头羊. 物联网模型抽象 物联网离我们越来越近,这主要得益于云计算和移动互联网技术的发展.物联

如何利用大数据做金融风控?| 硬创公开课

随着金融科技.科技金融等概念的热起,以及互联网金融.无金融服务群体的刚性需求下,大数据风控技术也获得越来越广泛地重视和应用.但是,如何利用大数据.机器学习等前沿技术做金融风控?如何通过海量数据与欺诈风险进行博弈?本次硬创公开课我们邀请了同盾科技首席风险官董骝焕博士为我们解答. 董骝焕是南开大学概率统计博士,他博士毕业后加入中科院,2007年加入IBM/ ILOG从事决策模型在各种业务问题中的应用.2010年至2013年先后在FICO和SAS支持金融反欺诈事业.2015年5月15日,董骝焕加入同盾

Databus:LinkedIn开源低延时变化数据捕获的系统

2月26日,LinkedIn开源了其低延时变化数据捕获系统Databus,该系统可以在MySQL以及Oracle数据源上捕获数据,不过当下LinkedIn只开源了Oracle上的连接器.Databus作为LinkedIn生态系统中的一致性保障组件,是具有十分高保障的一项产品,就算在低延时的情况下仍然具有高有效性;而其最大的特点莫过于无限制lookback能力及丰富的subscription功能. 以下为LinkedIn上Databus简述译文: 何为Databus LinkedIn拥有一个针对数