并行控制(concurrency control)

之前讲的都是概念,关于实际怎么防止调度读到或者写到自己不该写的东西我们其实一!点!都!没!讲!啦啦啦

实际中实现isolation这个性质的机制有两种,一种被称为TWO_PHASE LOCKING 还有一个被称为snapshot isolation,前面那个字面就很好理解,二步锁定,后面那个直接翻译被称为快照隔离。下面我们讲的是锁定。

锁定分为两种:

shared,即分享锁定,这个被分享锁定所锁定的数据可以被其他的调度套上分享锁定。这个锁定的拥有者对于锁定数据的操作权限仅限于读取数据。

exclusive, 即排外锁定,被这种锁锁定的数据不能被其他的任何调度锁定,被锁定的数据可以被持有锁定的调度读和写。

在这里需要介绍一个新的概念叫做concurrency control manager.这个系统负责控制数据库里所有的锁定需求。

锁的兼容定义见上。

我们定义LOCK-S(Q)为用share模式锁定数据Q,LOCK-X(Q)为用excluded模式锁定数据Q,UNLOCK(Q)来取消锁定Q。

下面进行对于锁定的两种使用方式的讨论。

理解上图以后我们发现,display(A+B)显示出的结果不是正确的,因为T1过早的解锁了B数据,而它本身的活动还没有完结 ,而事实上我们也很明白这个结果必然是错的,因为T1的剩下部分中有写的部分,这样的调度并不属于一个serializable的调度。

所以事实上这个情况属于T1过早的解开了锁,导致的数据不连续。

而当我们这么写的时候,就不需要担心不连续了,但是很明显的,这个调度并跑不起来,原因是显而易见的。

而这种相互卡死的情况被称为锁死,当遇到锁死的时候,必然伴随着回滚,而回滚同时也会将原来锁死的数据解锁。

而在设计模式的时候我们就遇到了这个问题,我们到底是要锁死还是要数据不连续——很明显前者好一点,因为可以通过数据回滚来解决,而数据不连续导致的外部输出是很难解决的。

接下来给大家带来一个定义:

很好理解的概念吧(233

对于一个调度,如果它是符合上述封锁协议规定的,那么我们称它为合法调度,我们称一个封锁协议保证可串行性,如果在它之下的所有合法调度都是可串行化的话,这个可以用检查内部的关系图有无环来确定。
  接下来介绍饿死的概念:

饿死,很明显,如果说在一个要求lock-x的调度前面跟着若干个要求lock-s的调度,这个lock-x的调度将被无限延期,所以说处理调度的法则为:

1.要求的数据没有被要求不兼容的锁锁住

2.前面没有任何比它要求更早的锁。

简单的说,就是按递交顺序排序。

时间: 2024-10-10 06:33:41

并行控制(concurrency control)的相关文章

乐观的并发控制(optimistic concurrency control)

ES是分布式的.当document被create,update,或者delete,这个document的新版本就会冗余到cluster的其他node中.ES是异步和并发的,意味着冗余请求也是并行进行的,并且请求到达也是无次序的.因此需要一个方式保证老版本的document不能重写新版本的数据. 如上所述,当我们讨论index,get和delete请求,我们指出每个document都有一个_version号,这个号码随着document的变化而增长.ES使用这个_version保证document

数据访问模式:数据并发控制(Data Concurrency Control)

1.数据并发控制(Data Concurrency Control)简介 数据并发控制(Data Concurrency Control)是用来处理在同一时刻对被持久化的业务对象进行多次修改的系统.当多个用户修改业务对象的状态并试图并发地将其持久化到数据库时,需要一种机制来确保一个用户不会对另一个并发用户的事务状态造成负面影响. 有两种形式的并发控制:乐观和悲观.乐观并发控制假设当多个用户对业务对象的状态同时进行修改时不会造成任何问题,也称为最晚修改生效(last change wins).对于

表空间tablespace,数据文件datafiles,和控制文件control files介绍

https://docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm#i5919 本文系翻译 表空间tablespace,数据文件datafiles,和控制文件control files介绍 在逻辑上,oracle把数据存储在表空间tablespace中,而在物理上,数据是存储在datafiles中的. 图1 图1很好的诠释了表空间与数据文件的关系,这里这一个表空间对应了两个数据文件,而数据对象如表.索引等,他们只关心表空间,对物

PHP输出缓冲控制- Output Control 函数应用详解

说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统 是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘.对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上显示. 其实对于PHP程序员来说,基本上每个脚本都涉及到了输出缓冲,只是在大多数情况下,我们都不需要对

继续说说spring security之并发控制(Concurrency Control)

定义,作用,说明: Concurrency Control:并发控制,主要用于避免同一用户多次登录,重复登录以及包括相关的session管理--具体官网---> 先看官网:http://docs.spring.io/autorepo/docs/spring-security/4.0.0.CI-SNAPSHOT/reference/htmlsingle/#session-mgmt 官网的并发控制已经说得比较清楚,但是偏偏有人(例如我)重写了(自定义了)验证的方法,导致了失效的问题,至此,一起说说s

CS3402 Transactions and Concurrency Control

Transactions and Concurrency Control 事务(Transactions) 根据维基百科的定义,一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的:1)为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法:2)当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰.简单来讲,事务的作用至少有两个:保证数据一致性,以及对数据进行隔离.这

PHP输出缓冲控制 - Output Control 函 应用详解

简介 说到输出缓冲,首先要说的是一个叫做缓冲器(buffer)的东西.举个简单的例子说明他的作用:我们在编辑一篇文档时,在我们没有保存之前,系统是不会向磁盘写入的,而是写到buffer中,当buffer写满或者执行了保存操作,才会将数据写入磁盘.对于PHP来说,每一次像 echo 这样的输出操作,同样是先写入到了 php buffer 里,在脚本执行完毕或者执行了强制输出缓存操作,数据才会在浏览器上显示. 其实对于PHP程序员来说,基本上每个脚本都涉及到了输出缓冲,只是在大多数情况下,我们都不需

RAC和ASM环境下修改控制文件control file

1,目前控制文件只有一个,为了安全性,增加到3个 SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- +DATA/racdb/controlfile/current.283.914350675 2,执行如下sql SQL> alter system set control_files = '+DATA/

MySQL 的乐观并发控制Optimistic concurrency control

默认情况下, MySQL的Innodb事务隔离级别是重复读 repeatable read, SELECT @@GLOBAL.tx_isolation, @@tx_isolation;REPEATABLE-READ    REPEATABLE-READ 进行以下测试, 同时开两个session, S1 和 S2, 都将autocommit关掉 set autocommit=0; 测试使用的是一张简单的表, 只有一行数据 CREATE TABLE `t1` ( `v1` tinyint(2) NO