本文作者:苏生米沿

本文地址: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. 1102mysql关于SOCK文件的认识

    自己原创,只为记录. 当本地登录MySQL的时候提示"Can't connect to local MySQL server through socket"的问题,其实代码是MyS ...

  2. 【贪心】Codeforces 349B.Color the Fence题解

    题目链接:http://codeforces.com/problemset/problem/349/B 题目大意 小明要从9个数字(1,2,--,9)去除一些数字拼接成一个数字,是的这个数字最大. 但 ...

  3. linux下多线程互斥量实现生产者--消费者问题和哲学家就餐问题

    生产者消费者问题,又有界缓冲区问题.两个进程共享一个一个公共的固定大小的缓冲区.其中一个是生产者,将信息放入缓冲区,另一个是消费者,从缓冲区中取信息. 问题的关键在于缓冲区已满,而此时生产者还想往其中 ...

  4. string[] 清理重复+反转显示

    string[] listUrl = String.Join(",", list.Replace("\r\n", ",").Split(', ...

  5. 全球性WannaCry蠕虫勒索病毒感染前后应对措施

    前言:针对WannaCrypt勒索病毒的讨论和技术文章是铺天盖地,大量的技术流派,安全厂家等纷纷献计献策,有安全厂家开发各种安全工具,对安全生态来说是一个好事,但对个人未必就是好事,我们国家很多用户是 ...

  6. 前端面试送命题-JS三座大山

    前言 本篇文章比较适合3年以上的前端工作者,JS三座大山分别指:原型与原型链,作用域及闭包,异步和单线程. 原型与原型链 说到原型,就不得不提一下构造函数,首先我们看下面一个简单的例子: functi ...

  7. drupal 8 之 calendar模块

    一.安装模块 calendar.view.date三个模块同时安装 二.创建一个事件内容类型 主要的是有一个时间字段 然后添加一个事件内容进行测试 [保存并发布] 三.创建日历视图 点击[结构]> ...

  8. [LeetCode] Partition Labels 分割标签

    A string S of lowercase letters is given. We want to partition this string into as many parts as pos ...

  9. 我的webstorm 使用总结

    有一次 ,我改了公共组件里的好多组件 ,然后我肯定是哪里改的不对 ,出语法错误了 ,但是我的 webstorm 编译并没有报错,然后我就手动一点点 改 ,去看 ,最后还是没有找到 ,我就把文件夹给删了 ...

  10. C++11 作用域内枚举

    enum class MyEnum{ P1 = , P2, P3, P4, P5 }; MyEnum myEnum = MyEnum::P2; 使用作用域的方式获取并限定P2的值.之所以要使用作用域, ...