写偏斜(Write Skew)

写偏斜可以理解为事务commit之前写前提被破坏,导致写入了违反业务一致性的数据,网上有个很好的简称为写前提困境,也就是读出某些数据,作为另一些写入的前提条件,但是在提交前,读入的数据就已被别的事务修改并提交,这个事务并不知道,然后commit了自己的另一些写入,写前提在commit前就被修改,导致写入结果违反业务一致性。

写偏斜发生在写前提与写入目标不相同的情境下

这是业务开发中最容易出错地方,如果开发者不太理解隔离级别,也不知道目前使用的是哪个隔离级别,很可能写出有写偏斜的代码,造成业务不一致。

举个例子:

信用卡系统对不同等级的会员有积分加成,3级会员则每次都3倍积分,同时,会有定时任务检查当积分不满足要求时,就会降级。

首先,会员进行了刷卡消费,此时要计算积分,开启了事务A,读到会员等级为3,与此同时定时任务也开始了,读到会员积分为2800,已经不满足3000分应该降级为2级,然后将会员等级降级为2并且commit,由于事务A读到的等级为3,它还是按照3倍积分为会员增加了积分,会员赚了,多亏那个程序员不理解他使用的事务隔离级别,出现了业务不一致。

丢失更新(Lost Updates)

由于未提交事务之间看不到对方的修改,因此都以一个旧前提去更新同一个数据,导致最后的提交结果是错误值。

假设有支付宝账户X,余额100元,事务A、B同时向X分别充值10元、20元,最后结果应该为130元,但是由于丢失更新,最后是110元。

丢失更新与写偏斜很相似,都是由于写前提被改变,

他们区别是,丢失更新是在同一个数据的最终不一致,而写偏斜的冲突不在同一个数据,在不同数据中的最终不一致

https://zhuanlan.zhihu.com/p/80369623

写偏斜(Write Skew)和丢失更新(Lost Updates)区别相关推荐

  1. mysql写偏斜_数据库隔离级别剖析

    前言 在线应用业务中,数据库是一个非常重要的组成部分,特别是现在的微服务架构为了获得水平扩展能力,我们倾向于将状态都存储在数据库中,这要求数据库能够正确.高性能处理请求,但这是一个几乎不可能达到的要求 ...

  2. day36 10-Hibernate中的事务:解决丢失更新

    演示hibernate如何产生丢失更新的 丢失更新是怎么玩的?首先两个事务先都把它查出来. A事务里面去修改的数据没了,被B事务覆盖掉了.这是被B事务提交覆盖,B事务回滚也能覆盖.这就是丢失更新的效果 ...

  3. mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...

    事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...

  4. 十三: 悲观锁乐观锁:解决丢失更新问题

    悲观锁:认为丢失更新一定会出现,可以在查询的时候加入for update 认为丢失更新一定会出现,查询时: select * from account for update;for update :  ...

  5. mysql解决丢失更新_mysql 数据丢失更新的解决方法

    最新看<innodb 引擎内幕>,作者有介绍丢失更新的问题,这里记录自己的想法和方案 --------------------------------------------------- ...

  6. 第一类第二类丢失更新

    第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆盖了.这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来: 时间 取款事务A 转账事务B T1 开始事务   T2 开始事务 ...

  7. 幻读Java_脏读、幻读、不可重复读和丢失更新

    1.脏读 -- 一个事务读取到另外一个事务没有提交的数据 事务T1:更新一条数据 -->事务T2:读取事务T1更新的记录 事务T1:调用commit进行提交 此时事务T2读取到的数据是保存在数据 ...

  8. 数据库第一类第二类丢失更新

    第一类丢失更新(回滚丢失,Lost update) A事务撤销时,把已经提交的B事务的更新数据覆盖了.这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来: 时间 取款事务A 转账事务B ...

  9. 手把手教你写专利(2022.12.1更新)

    手把手教你写专利(2022.12.1更新) 一.专利类型 要想发表一篇专利,首要目标是确认专利类型 1.1 发明专利 发明,是指对产品.方法或者其改进所提出的新的技术方案. 如:现有的钢笔是蘸水形成的 ...

  10. Android显示系统之View与SurfaceView更新屏幕的区别

    /******************************************************************************************** * auth ...

最新文章

  1. AMD 再次抨击基准测试工具 SYSMark 偏袒英特尔
  2. mysql 图形化工具
  3. python发明者叫什么-编程语言简史:有人不喜欢花括号,于是他发明了 Python
  4. 三层架构和MVC一样吗?(区别)
  5. [vue] vue怎么获取DOM节点?
  6. JAVA8新特性Optional和Stream和Localdate用法
  7. linux开源视频播放器_什么定义了Linux的顶级开源音乐播放器?
  8. python双向索引什么意思_Python 双向链表的实现
  9. 怎么用计算机打对错,丶符号怎么打-Word里的对√ 和 错× 怎么打出来的?
  10. 共享软件作者怎样才能月入万
  11. IE网页截图技术笔记
  12. 前缀和(C/C++)
  13. 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
  14. Tomcat优化方案
  15. 数字图像的类型——伪彩色,真彩色,假彩色
  16. BIM模型之建模精度(Level of Detail, LOD)
  17. 小爱音箱怎么装app_小爱音箱APP下载
  18. 是爱情,让我们直立行走
  19. java邮件模板_java创建邮件模板
  20. 项目开发中引入外部字体库

热门文章

  1. 给为工作而焦急迷茫的你
  2. NoSql数据库确实非常适合网站
  3. TPM的R环境的安装和配置
  4. Linux中文件名解析处理源码分析
  5. 关于通用配置管理模块的思考-续(用XmlDocument 还是DataSet)
  6. linux下无法正常打开pdf文件的解决方法
  7. Python基础练习-002-求1000以内的完全数
  8. 自定义的BaseAdapter实现LIstView的展示
  9. HDU-3401 Trade 单调队列优化DP
  10. CSUOJ 1197- Staginner 买葡萄