【COMP207 LEC10-12】

news/2024/12/12 17:49:46/

LEC 10-12

Conflict 

>> 当两条指令是不同事务相同数据项上的操作,并且其中至少有一个是write指令时,则称这两条指令是冲突的 (不用想其他的东西,单纯满足这三个条件就可以了)例:

 ①Ii = read(Q), Ij = read(Q);

 ②Ii = read(Q), Ij = write(Q); 

 ③Ii = write(Q), Ij = read(Q); 

 ④Ii = write(Q), Ij = write(Q); 

比如 这四个操作中 ②、③、④就是li和lj冲突的 

Precedence Graph

>> 是一个有向图(directed graph)G = (V,E),V是顶点集,E是边集

当满足以下任意一个条件时,T1指向T2:

 ①在T2执行read(Q)之前,T1执行write(Q)

 ②在T2执行write(Q)之前,T1执行read(Q)

 ③在T2执行write(Q)之前,T1执行write(Q)

(其实为了好记的话,除了“rr”,其他的只要后面字母一样都可以当作边的条件)

Testing Conflict-Serializability  判断是否有冲突可串行性

>> 有如上图的“圈”的话就不是conflict-serializability,没有圈就是conflict-serializability,唯一判断标准

Enforcing Conflict-Serializability Using Locks 使用locks强制...

>> Operations

l_{i}(x) :  lock 

u_{i}(x) : unlock

>> Rules

1. 每一个r(x)/ w(x)前面都要有一个li(x),并且li(x)和ui(x)不能挨着

2. li(x)在 lj(x)前面那么 ui(x) 就要在uj(x)前面

Two-Phase Locking (2PL) 

>> Simple modification of the simple locking mechanism that guarantees conflict-serializability

>> 2PL分为phase 1和phase 2, phase 1 是从第一个lock到第一个unlock之前,phase 2 是从第一个unlock到最后。如果phase 2 里还有lock,那么这就不是一个2PL

>> If S is a schedule containing only 2PL transactions, then S is conflict-serializable

>>  2PL可能会引起一些问题,例如死锁  : deadlocks whick leads to wait forever

>> How can we make 2PL more flexible? By using different lock modes

1. Share lock   Operation : s-lock(X)  Shorthand notation : sli(X)

>> 可能会造成死锁 例如:

T1:

begin Transaction t1

select * from table with (holdlock) (holdlock的意思是加共享锁,直到事务结束(提交或回滚)才会释放)

update table set column1=‘hello’

T2:

begin Transaction t2

select * from table with (holdlock)

update table set column1=‘world’
假设T1和T2同时到达select语句,都为table加上了共享锁(hold lock),那么当T1、T2要执行update时,根据锁机制,共享锁需要升级为排他锁,但是排他锁与共享锁不能共存,要给table加排他锁,必须等待table上的共享锁全部释放才可以,可是holdlock的共享锁必须等待事务结束才能释放,因此T1和T2都在等待对方释放共享锁,形成循环等待,造成死锁
 

2. Exclusive lock      Operation : x-lock(X)  Shorthand notation : xli(X)

3. Update lock Operation : u-lock(X) uli(X) 

作用和s-lock()是类似的,但更新锁与共享锁兼容(shared lock和exclusive lock不兼容),所以更新锁可以防止里那种一般情况的死锁发生,update lock不必等共享锁全部释放成才能变成exclusive lock,可以直接变成

更新锁会阻塞其他的更新锁和排他锁,因此更新锁和更新锁是不兼容的

New upgrading policy :

4. Intention lock :  If a transaction wants to lock an item X, it must first put an intention lock on the super-items of X  (就是在在lock item X前,需要先有一个intention lock)

Intention shared : IS  Intention to request a shared lock on a sub-item

Intention exclusive : IX  Intention to request an exclusive lock on a sub-item

>> Policy for Granting Locks

Why Might a Transaction Abort?

1. Errors while executing transactions

2. Deadlocks

3. Explicit request

Logging in DBMS

>> Undo log 

作用 :undo log是为了恢复“撤销”这个行为之前的数据

>> Records : 

<START T>: Transaction T has started.

<COMMIT T>: Transaction T has committed.

<ABORT T>: Transaction T was aborted.

<T, X, v> : Transaction T has updated the value of database item X, and the old value of X was v. 和redo log不同,这里v是指的是在改变前的数据

>> 其实看懂这张图就行了,write()是不写入database的,而只写入buffer,等待buffer把X写入log后再用output()写入disk(database)

>> Redo log

作用 : 为了恢复已经提交的数据

<T, X, v>: “Transaction T has updated the value of database item X & the new value of X is v.” 这里最新的X值是v,而不是以前的值是v。在<commit t>时,直接将v写入disk就行

>> Combinations of undo and redo

>> Record : 

 <T, X, v, w>: “Transaction T has updated the value of database item X, and the old/new value of X is v/w.”


http://www.ppmy.cn/news/128862.html

相关文章

压力传感器PFPL203 3BSE055365R1 NPI-15J-C00903 GE/Nova70M P7620C0042A A1004 A1020 C0040 C0042B LPE9400

ABB缸压传感器PFPL203&#xff0c;柴油机气缸压力监测ABB Cylmate系统是对发动机运行状态进行连续监测和分析的综合系 统。v18 0 3 0 18 30 32对气缸压力和曲轴位置的测量&#xff0c;结合ABB先进的数学建模&#xff0c;为用户 提供发动机实时准确的数据。 PFPL203压力传感器&…

R7900P/R7960P/R8000P梅林固件

本固件为商家定制&#xff0c;所以不公开刷机方法&#xff0c;不公开代码 警告&#xff01;警告&#xff01;警告&#xff01;重要的事说三遍 直接从官方刷梅林&#xff0c;必砖 刷华硕官方或其他固件&#xff0c;必砖 从梅林刷网件官方&#xff0c;必砖 任意固件刷op或op刷任…

3GPP R17 RedCap

什么是RedCap RedCap&#xff0c;即Reduced Capability的简称&#xff0c;在早期的3GPP讨论过程中&#xff0c;它也被称为NR Light。RedCap是针对IoT场景&#xff0c;为了降低终端复杂度、成本和功耗而提出。相比NR标准版本&#xff0c;RedCap主要在如下几个方面做了简化&#…

上海贝尔S-010W-AV2C-RK3228H线刷固件

上海贝尔S-010W-AV2C-RK3228H线刷固件 固件特点&#xff1a; 1、修改dns&#xff0c;三网通用&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、无开机广告&#xff0c;无系统更新&#xff0c;不在被强制升级&#xff1b; 4、大量精简内置的没用的…

R16 5G NR Two-Step RACH

在5G的第二个版本R16当中&#xff0c;为了减少RACH过程中的信令开销&#xff0c;降低RACH过程的延迟&#xff0c;提出了2-step RACH。在R16协议当中&#xff0c;用Type-2 RACH表示2-step RACH&#xff0c;Type-1 RACH表示原来的4-step RACH。在发起RACH之前&#xff0c;高层会指…

电商 - 高并发下订单商品库存扣减方案

开发一个电商库存系统时,我们最担心的就是高并发和防超卖了 电商库存系统场景 前提:分布式系统,高并发 商品A只有100库存,现在有1000或者更多的用户购买。如何保证商品库存在高并发的场景下是安全的 高并发场景下,商品展示页上面的信息,除了库存的其他信息属于静态数据…

【传感器模块】TGS8100使用笔记

TGS81000气体传感器使用笔记 前段时间做项目用TGS8100测空气污染物浓度&#xff0c; 数据手册 电路图 | pwm输出配置&#xff08;STM32F1,标准库&#xff09; 由于外围电路采用5v供电&#xff0c;与标准电路不同&#xff0c;因而8100_C&#xff08;输入&#xff09;采用1H…

解决appium中Error: The port #8100 is occupied by an other process的问题

appium调试两个ios真机时&#xff0c;总是遇到The port #8100 is occupied by an other process的问题&#xff0c;使用网上的方法iproxy 8100 8100也无法解决&#xff0c;反而一个手机都无法启动&#xff0c;我使用如下方法成功同时启动两个手机 方法一&#xff1a; appium -a…