【数据库】序列化

如果不同事务之间不允许并发,那么事务的执行结果肯定没有问题,是可以接受的。但是,实际上为了执行的效率,数据库系统在设计的时候必然需要支持并行,否则效率很低。事务一旦并发,就会引来各种问题,比如脏读或者更新丢失之类的。因此事务和事务之间需要一定程度的隔离或者互斥。隔离的越严格并发效果越差。最严格的隔离效果称为是序列化。

序列化指的是多个事务并发的执行结果与顺序执行的结果一致。这样的结果肯定符合我们的要求,没有任何并行带来的问题,缺点就是效率差,没有完全发挥并行的特性。一般的DBMS并不会采用如此之高的隔离级别。

如何判断事务的执行是不是序列化?

可以使用一个有向图判断,只要事务T1有写操作在T2写操作前,或者T1有读在T2写前,或者T1有写在T2读前,当然是针对同一个数据项,那么就画一条有向边从T2指向T1。对所有的事务对都做上述处理,得到的图如果有环,就不可以序列化,否则可以。

有两种方法保证序列化,一是两阶段锁,二是时间戳

1.两阶段锁:

分为加锁和解锁两个过程,加锁阶段不能解锁,一旦解锁就不能再加锁。也就是所有的事务开始时全部申请加锁,然后执行,最后在全部解锁,不能出现解锁 以后又加锁的情况。这个方法可能导致死锁。而且他可以产生序列化,但是有的事务可以序列化,但是却无法通过这个算法产生。

2.时间戳:

每一个事务都有一个自己的时间,用于表明先后。每一个数据项也有读和写的时间戳,是最后一个进行这个操作的事务的时间戳。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值