数据库事务--串行化

2018-06-02  本文已影响48人  MontyOak

之前提到了不同的数据库隔离级别,有一些问题需要提出:

从应用开发者角度来看,串行化隔离可以说是最高的隔离级别了。串行化指并行事务执行结果和串行执行结果一致的保证(避免各种形式的竞态条件)。

实际串行执行

最简单的串行化保证就是真实的串行执行操作。这种方式看似牺牲了多线程执行的并行能力,实际上在最近,这种想法已经被很严肃的考虑:

这种思想已经被VoltDB/H-Store,Redis和Datomic所采用。
串行执行有以下特点:

过于单线程串行化的数据库,RedisVoltDB都非常值得学习。

两段锁

之前说过,锁可以有效避免脏读脏写。两段锁要求多事务可以同时访问某条没有被写锁加锁的数据,如果被写锁加锁,则:

在两段锁的具体实现上:

串行化快照隔离(Serializable Snapshot Isolation)

乐观并发控制VS悲观并发控制:

上面提到的两段锁就是典型的悲观锁。串行化执行等价于为每一个事务加上互斥锁,为了减少单个事务持有锁的时间,只能把事务拆分成较小的粒度。与之相反,串行快照隔离是乐观锁。串行快照隔离,字面上来讲还是在读取阶段保证数据来自于一个稳定版本的快照,加上对于线性执行的冲突检测来决策是否应该回滚某一个事务。为了避免可能出现的写倾斜,有下面两种方法:

上一篇 下一篇

猜你喜欢

热点阅读