数据库 | 数据库保护 | 冲突可串行化

目录

冲突可串行化

指令的顺序

冲突指令

冲突等价

冲突可串行化

优先图(precedence graph)

冲突可串行化判定准则

与冲突可串行化等价的串行顺序


视图可串行化

https://blog.youkuaiyun.com/stone_fall/article/details/88560088 


冲突可串行化

指令的顺序

  考虑一个调度S中的两条连续指令(仅限于readwrite操作)IiIj分别属于事务TiTj

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

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

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

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

  在 情况下,IiIj的次序无关紧要。其余情况下,IiIj的次序不同,其执行结果也不同,数据库最终状态也不同

冲突指令

  当两条指令是不同事务在相同数据项上的操作,并且其中至少有一个是write指令时,则称这两条指令是冲突的

  如在②、③、④情况下,IiIj 是冲突的

  非冲突指令交换次序不会影响调度的最终结果

冲突等价

  如果调度S可以经过一系列非冲突指令交换转换成调度S',则称调度SS'是冲突等价

冲突可串行化

  当一个调度S与一个串行调度冲突等价时,则称该调度是冲突可串行化的

  如并行调度3是冲突可串行化的

  存在结果相同,但非冲突等价的调度

优先图(precedence graph)

  一个调度S的优先图是这样构造的:它是一个有向图G =(V,E),V是顶点集,E是边集。顶点集由所有参与调度的事务组成,边集由满足下述条件之一的边Ti-> Tj组成:

  ①在Tj执行read(Q)之前,Ti执行write(Q)

  ②Tj执行write(Q)之前,Ti执行read(Q)

  ③Tj执行write(Q)之前,Ti执行write(Q)

  如果优先图中存在边Ti->Tj则在任何等价于S的串行调度S'中,Ti都必须出现在Tj之前

冲突可串行化判定准则

  如果调度S的优先图中有环,则调度S是非冲突可串行化的。如果图中无环,则调度S是冲突可串行化的

与冲突可串行化等价的串行顺序

  串行顺序可由拓扑排序得到,求出与优先图的偏序相一致的线序

 

 

 

 

 

 

 

 

 

 

### 数据库事务冲突与可串行化 #### 事务冲突的概念 在多用户环境下,当多个事务并发访问同一数据项时可能发生冲突。这些冲突主要分为三类: - **写-写冲突**:两个或更多事务试图修改同一个数据项。 - **读-写冲突**:一个事务正在读取某个数据项的同时另一个事务尝试对其进行修改。 - **写-读冲突**:一个事务正准备读取的数据被其他事务所更改。 上述情况可能导致诸如脏读、不可重复读和幻读等问题的发生[^2]。 #### 可串行化定义及其重要性 为了防止这些问题,在实际的数据库系统中,可串行化调度作为并发控制的关键原则之一存在。这意味着即使多个事务并行运行,其效果也应该如同它们按某种顺序依次单独执行一样,从而确保了数据的一致性和完整性[^1]。 #### 实现可串行化的技术手段 ##### 锁机制 锁是一种常用的实现方法,它可以阻止不同类型的冲突发生。具体来说有以下几种形式: - **共享锁 (S)**:允许持有者和其他拥有相同资源上的共享锁的事物共同读取该对象;但是不允许任何事物获得此对象上的排他锁直到所有现有的共享锁都被释放为止。 - **排他锁 (X)**:授予唯一权限给持有所谓“独占”的实体去操作指定的对象,并且在此期间内禁止其它任何形式的操作请求。 通过合理设置加锁策略可以有效避免大多数常见的事务间干扰现象。 ##### 时间戳排序算法 另一种方式是采用时间戳来决定各个待处理的任务之间的先后关系。每当创建一个新的交易时都会分配一个唯一的全局单调递增的时间标记。之后依据这个数值大小来进行相应的排队安排,以此达到模拟线程安全的效果。 ##### 多版本并发控制(MVCC) MVCC允许多个版本的数据共存于内存之中,使得读者不必等待写者的完成即可获取到所需的信息副本。这种方法不仅提高了系统的响应速度还简化了许多复杂的同步逻辑设计。 ```sql BEGIN TRANSACTION; SELECT * FROM table_name WHERE id = 1 FOR UPDATE; -- 使用锁定读以防止其他事务修改当前记录 UPDATE table_name SET column_name = value WHERE id = 1; COMMIT; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值