关于数据库的transaction isolation level本质

数据的isolation level有

read uncommited - problem dirty read

read commited - problem unrepated read

repeated read(snapshot) - problem write skew/ phantom write

serialized - no problem excpet performance

工作中,除了你碰到这种问题会深有体会,靠死记硬背其实很容易忘记。本文作者提供一个自己记忆的思路。其实我们都用过github的版本控制,结合一下就会记忆深刻。

其实我们用github,我们的每一次提交就是一次transaction,我们先从master拉下一个snapshoot, 开始修改是transaction begin,修改后在我们提交的时候,就是一个t'ransaction end。提交前,无论我们怎么重新读original code,代码都是不变的,这就是可重复读。但是提交后,当我们merge的时候,就会有surprise,因为别人也修改了同行代码。这就造成了phantom write/write skew。怎么解决呢,我们可以手动merge,(有些系统设计还真的实现了这个思路,比如当有version conflict的时候,把不同version都保存下来,在用户读的时候,提示用户去确认哪分是对的)。但是如何让系统自动做这个merge呢?这个很难,无论系统如何merge,都有导致update lost的可能性。所以我们如果真的想完全杜绝这个问题,只能用serialized了,其实就是加锁,行锁连带着行间锁,解决是解决问题,但是就是效率低。

有一个最新的技术就是serializable snapshot isolation(SSI),据说是serializability,同时performance比之前高,其实本质就是一个乐观锁,两个竞争的update,失败者重新retry呗,就像你提交比队友晚了,你就只能苦逼的merge呗。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值