本文作者:苏生米沿

本文地址:http://blog.csdn.net/sushengmiyan/article/details/50551741

当我们谈起隔离的时候,我们总是假定两个物体直接要么隔离要么不隔离;但是实际上,两者直接没有那么明显的界限。

当我们说数据库的事务的时候,完全隔离需要花费高的代价。你不能阻止世界用多用户联机事务处理系统获取数据。

因此,有很多的隔离级别可以供我们选择。当然,其中有些选项,是隔离级别较弱的,但是能提升性能和系统的伸缩性。

事务隔离级别

1.

2.

3.

事务隔离性问题

首先,我们看一下几个消弱隔离性的几个可能会出现的场景,ANSI SQL标准定义了几个数据库系统允许的隔离性级别。

图11.1展示了更新丢失的问题:两个对一行数据的更新同时进行,第一个更新先完成,第二个发生了异常,此时回滚,那么第一个修改的就会连带回滚,数据丢失。这发生在没有锁的系统中,此时没有隔离并发事务。

图11.2展示了脏读的发生情况: 脏读取出现在一个事务读另一个事务修改但是还没有提交的数据的时候。这很危险,因为另一个事务进行的改变很可能会回滚,并且第一个事务可能会得到非法数据(and invalid data may be written by the first transaction);

图11.3展示了读不重复数据的情况:这时,事务两次读取数据,并且两次读取的数据是不一致的。例如,两次读取的时候,另一个事务对其进行了更新,导致两次读取数据不一致。

图11.4展示了后更新覆盖先更新的问题:读不重复的一个特殊情况就是后提交者获胜。假设两个并发的事务都读取数据,一个更新它并提交,另一个也更新并提交,那么最终是以第二个更新为准的,第一个更新就被覆盖了。这种情况对用户来说是很有迷惑性的,A用户在不被知晓的情况下,被B的数据覆盖掉了,B通过一个过时的信息做出了决定。

图11.5展示了幻读的情况:这是说,在一个事物两次查询的过程中,有另一个事务,对其数据进行了删除或者插入操作,两次读的就出现了不同的情况。

既然你知道了会发生的最坏的情况,我们将会定义隔离级别和看各种级别能解决哪些问题。

hibernate5学习之理解数据库级并发的更多相关文章

  1. 总结:如何使用redis缓存加索引处理数据库百万级并发

    前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...

  2. 使用redis缓存加索引处理数据库百万级并发

    使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1 ...

  3. spring学习笔记---数据库事务并发与锁详解

    多事务运行并发问题 在实际应用中,往往是一台(或多台)服务器向无数客户程序提供服务,当服务器查询数据库获取数据时,如果没有采用必要的隔离机制,可能会存在数据库事务的并发问题,下面是一些常见的并发问题分 ...

  4. 多事务运行并发问题spring学习笔记——数据库事务并发与锁详解

    多事务运行并发问题 在实际应用中,往往是一台(或多台)服务器向无数客户程序提供服务,当服务器查询数据库获取数据时,如果没有采用必要的隔离机制,可能会存在数据库事务的并发问题,下面是一些常见的并发问题分 ...

  5. C10K——千万级并发实现的秘密:内核不是解决方案,而是问题所在!(转)

    既然我们已经解决了 C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能.不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接. 要知道它是如何做到的,我们首先要 ...

  6. 【眼见为实】自己动手实践理解数据库REPEATABLE READ && Next-Key Lock

    [REPEATABLE READ] 首先设置数据库隔离级别为可重复读(REPEATABLE READ): set global transaction isolation level REPEATAB ...

  7. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  8. 深入理解数据库磁盘存储(Disk Storage)

    数据库管理系统将数据存储在磁盘.磁带以及其他的裸设备上,虽然这些设备的访问速度相比内存慢很多,但其非易失性和大容量的特点使他们成为数据存储的不二之选. 本文主要讨论大型数据库产品的磁盘存储内部结构,这 ...

  9. SQL Server 学习博客分享列表(应用式学习 + 深入理解)

    SQL Server 学习博客分享列表(应用式学习 + 深入理解) 转自:https://blog.csdn.net/tianjing0805/article/details/75047574 SQL ...

随机推荐

  1. jacascript CSS样式的脚本化操作

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 引入CSS有3种方式:行间样式,内联样式和外部链接样式. 在实际工作中,我们使用 javascript 操 ...

  2. 线程的同步控制(Synchronization)

    临界区(Critical Sections) 摘要 临界区(Critical Section) 用来实现"排他性占有".适合范围时单一进程的各线程之间. 特点 一个局部对象,不是一 ...

  3. HTC Vive 叠影器无法创建设备

    今天使用笔记本电脑打开SteamVR发生错误:SteamVR启动失败,"Shared IPC Compositor Connected Fail(306)",然后启动失败,在UI界 ...

  4. css3 box-shadow阴影(外阴影与外发光)

    基础说明:     外阴影:box-shadow: X轴  Y轴  Rpx  color;     属性说明(顺序依次对应): 阴影的X轴(可以使用负值)    阴影的Y轴(可以使用负值)    阴影 ...

  5. [IOI2007]训练路径

    Description 马克(Mirko)和斯拉夫克(Slavko)正在为克罗地亚举办的每年一次的双人骑车马拉松赛而紧张训练.他们需要选择一条训练路径. 他们国家有N个城市和M条道路.每条道路连接两个 ...

  6. [JSOI2008]最大数

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...

  7. [Codeforces]663E Binary Table

    某变换好题.不过听说还有O(2^n*n^2)DP的…… Description 给定一个n*m的01矩阵,你可以选择对任意行和任意列取反,使得最终“1”的数量尽量少. Input 第一行两个整数n,m ...

  8. python变量、条件循环语句

    1. 变量名 - 字母  - 数字  - 下划线  #数字不能开头:不能是关键字:最好不好和python内置的函数等重复 2. 条件语句 缩进用4个空格(Tab键)注意缩进如果是空格键和Tab键混用, ...

  9. npm run dev 出错的解决办法

    bogon:~ yan$ cd my-project bogon:my-project yan$ npm run dev > my-project@1.0.0 dev /Users/yan/my ...

  10. python的运算符与表达式

    Python运算符与表达式 1. 运算符分类 运算符主要分5种: 1. 算术运算符 2. 比较运算符 3. 位运算符 4. 逻辑运算符 5. 成员运算符 6. 身份运算符 7. 赋值运算符 1. 算术 ...