事务的并发控制big picture

35 篇文章 0 订阅
13 篇文章 0 订阅

Goal:即满足一致性又尽量提高吞吐量

Sequential equivalence checking: 两个事务的所有conflicting operation pair的相对顺序都是一样的


悲观并发控制:用锁实现 Sequential equivalence

锁的理解,2个作用

1)基本数据完整性,防止同时修改导致数据被破坏

2)操作完整性、事务完整性,复合状态的完整性,比如改名字,firstName, lastName,必须同时改。

不过归根到底是一样的,基本数据的完整性,比如一个int,可以看作是组成它的4个字节的复合状态的完整性。

乐观并发控制:allow to proceed , but check later


悲观并发控制

1)read mode 和 write mode 增加一定并发性

2)如果只是访问对象时候上锁,访问结束解锁,只能保证单个对象本身的一致性,保证不了事务的一致性。好比多线程下,修改对象的多个字段,针对这个操作设一个锁,或者锁整个对象,而不是每个字段单独做到互斥访问就可以了。

3)two phase locking 保证 sequential equivalence :保证了两个事务的所有conflicting operation pair的相对顺序一致,(如不一致则需要等待,以至一致)

strict two phase locking: 所有的锁都是commit时候释放


锁机制的缺点:死锁

死锁的3个必要条件

1)存在互斥锁,(都是read mode不存在问题),也就是存在等待

2)非抢占——只能等

3)wait for graph 有环

 解决死锁等几个办法

1)tryLock, 有timeout的等待,timeout了就abort

2)死锁检测,维护wait-for graph,后台定时检查是否有环,abort其中一个

3)防止死锁的发生,针对死锁的3个必要条件

a) readonly

b) 允许抢占

3)在一开始申请所有的锁,或者以相同顺序申请锁,其实是相当于把多个对象的访问、多个锁,合并成一个整体锁。


乐观并发控制

1 随便写,但是commit的时候check sequential equivalence:cascading abort 

2 Timestamp Ordering

Assign each transaction an id 

Transaction id determines its position in serialization order 

Ensure that for a transaction T, both are true:

1)T’s write to object O allowed only if transactions that have read or written O had lower ids than T. 

2)T’s read to object O is allowed only if O was last written by a transaction with a lower id than T. 

如果发现violate,abort


3 MVCC

For each object
1)A per-transaction version of the object is maintained,Marked as tentative versions
2)And a committed version
Each tentative version has a timestamp
On a read or write, find the “correct” tentative version to read or write from
“Correct” based on transaction id, and tries to make transactions only read from “immediately previous” transactions


对于key-value store的乐观并发的一种机制是 Conditional update: put(key, result, {ki, vi}),后面的kv列表是condition,也是得出result依赖的数据,如果没变则update,否则result失效,返回失败,client可以重新计算。condition列表可以简化为{k1, version1, k2, version2 },如果value数据比较大的话(比如字符串),这样,可以减小传输和比较的开销。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值