MYSQL–架构–MGR–理论–04–事务和冲突检测机制


1、MGR 集群中事务的生命周期

1.1、MGR集群(MGR 组复制 技术示意图)

  1. MGR集群由DB1,DB2,DB3构成
  2. 集群中每个DB都有 MGR层

1.1.1、MGR层功能组成

  1. Paxos模块

    1. 基于 Paxos 算法确保所有节点收到相同广播消息
    2. 广播消息的内容结构:transaction message
  2. Certify模块(冲突检测)
    1. 进行冲突检测确保数据最终一致性
    2. 冲突检测中内存结构:certification info

1.2、MGR 集群中事务的生命周期

  1. 当 DB1 上有 事务T1 要执行时,T1 对 DB1 是来说本地事务,对于 DB2、DB3 来说是远端事务。
  2. DB1 上在 事务T1 在被执行后,会把执行 事务T1 信息广播给集群各个节点,包括 DB1 本身,通过 Paxos模块 广播给 MGR集群 各个节点,半数以上的节点同意并且达成共识,之后共识信息进入各个节点的 certify模块(冲突检测),各个节点各自进行冲突检测验证,最终保证事务在集群中最终一致性。
  3. 在冲突检测通过之后:
    1. 本地 事务T1 在 DB1 直接提交即可,否则直接回滚。
    2. 远端 事务T1 在 DB2 和 DB3 分别先更新到 relay log,然后应用到 binlog,完成数据的同步,否则直接放弃该事务。

2、transaction message

广播消息的内容结构

2.1、结构

2.2、说明

2.2.1、write set

  1. 写入集合
  2. 是事务更新行相关信息的Has 值
  3. write set=Hash(库名+表名+主键(唯一键)字段信息)

2.2.2、gtid_executed

  1. 已经执行过的事务 gtid 集合,即事务快照版本。

2.2.3、transaction_context_log_event

  1. 事务上下文信息
  2. 由下面内容组成
    1. write set
    2. gtid_executed

2.2.4、gtid_log_event

  1. 已经执行过的事务 gtid 集合。

2.2.5、log_event_group

  1. 事务日志信息
  2. 后续要更新到 relay log 中。

3、certification info

  1. 每个MGR节点都有一个 certification info 的内存结构
  2. certification info 保存了通过冲突检测的事务的 write set 和 gtid_executed。

3.1、结构

ertification info 相当于一个 map

3.1.1、key

  1. string 结构
  2. 保存 write set中提取的主键值
    1. Hash(库名+表名+主键(唯一键)字段信息)

3.1.2、value

  1. set 集合
  2. 保存 gtid_executed 事务快照版本。

3.2、举例

T1 事务,T1 更新 d1数据库 t1表 中id=1 和 id=2的两行数据,它对应快照版本 UUID_MGR 是 :1-100,刚开始 certification info 为空,所以直接提交,之后 certification info 中快照版本直接更新为 1-101。

4、冲突检测机制

  1. 冲突检测通过标准
  2. 单事务 写入时冲突检测机制
  3. 多事务 写入时冲突检测机制

4.1、冲突检测通过标准

若 transaction UUID_MGR  >= certification info UUID_MGR,则冲突检测通过。

5、单事务 写入时冲突检测机制

5.1、举例

  1. 事务T2,更新 id=2 的行

    1. 事务T2 的 UUID_MGR 为 1-102
    2. 节点中冲突检测模块中的 certification info 中的 UUID_MGR 为 1-101
      1. 3.2举例中已经变为1-101
    3. T2的UUID_MGR:1-102>UUID_MGR:1-101,则 T2 冲突检测通过
      1. 将UUID_MGR变为1-103
  2. 事务T3,更新 id=1 的行
    1. 事务T3 的 UUID_MGR 为 1-100
    2. 节点中冲突检测模块中的 certification info 中的 UUID_MGR 为 1-101
      1. 3.2举例中已经变为1-101
    3. T3的UUID_MGR:1-100 < UUID_MGR:1-101,则 T3 冲突检测通过
      1. T3事务丢弃

6、多事务 写入时冲突检测机制

6.1、原则

  1. 多个事务修改同一个 id 对应的数值,需要按照先后顺序进行冲突检测。
  2. 多个事务同时对不同的 id 进行修改,各自进行修改即可。
  3. 不同的事务对同一个 id 修改,需要按照先后顺序进行冲突检测即。

6.2、举例

注意

3.2举例和5.1的举例,导致

d1.t1.id=1的 UUID_MGR 为 1-101
d1.t1.id=2的 UUID_MGR 为 1-103

事务T4,事务T5 同时更新 id=1的行,按照先来后到顺序进行冲突检测,T4 先到先进行冲突检测。

6.2.1、事务 T4 更新 id=1 的行

  1. 事务T4 的 UUID_MGR 为 1-102
  2. 节点中冲突检测模块中的 certification info 中 id=1 的 UUID_MGR 为 1-101
  3. T2的UUID_MGR:1-102>UUID_MGR:1-101,则 T4 冲突检测通过
    1. 更新为 certification info 中 UUID_MGR 为 1-103。

6.2.2、事务 T5,更新 id=1 的行

  1. 事务T5 的 UUID_MGR 为 1-100
  2. 节点中冲突检测模块中的 certification info 中 id=1 的 UUID_MGR 为 1-103
  3. T5的UUID_MGR:1-100 < UUID_MGR:1-102,则 T5 冲突检测不通过。

6.2.3、事务 T6,更新 id=3 的行

  1. 事务T6 的 UUID_MGR 为 1-100
  2. 节点中冲突检测模块中的 certification info 中 id=3 的 UUID_MGR 为空
  3. T6的 UUID_MGR:1-100>UUID_MGR,则 T6 冲突检测通过
    1. 更新为 certification info 中 UUID_MGR 为 1-101。

6.3、举例–最终结果

事务T4和事务T5并行修改 id=1,T4 写入成功,T5 丢弃,T6 写入 id=3 事务,写入成功。

MYSQL--架构--MGR--理论--04--事务和冲突检测机制相关推荐

  1. MySQL的存储引擎、事务和锁机制

    1.什么存储引擎 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧,锁定水平等功能,使用不同的存储引 ...

  2. 第04章 逻辑架构【1.MySQL架构篇】【MySQL高级】

    第04章 逻辑架构 前言 推荐 第04章 逻辑架构 1. 逻辑架构剖析 1.1 服务器处理客户端请求 1.2 Connectors 1.3 第1层:连接层 1.4 第2层:服务层 1.5 第3层:引擎 ...

  3. mysql事务的优点和缺点_OLTP应用之MySQL架构选型--图文教程

    在我们下定决心将企业核心应用从企业级数据库迁移到开源数据库产品.使用本地磁盘代替共享存储之前.我觉得我们必须要面对并回答以下几个问题之后才能真正的将开源进行到底,将想法付诸于实践. 下面我们来看一下我 ...

  4. 数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论

    mysql的逻辑分层:连接层 服务层 引擎层 存储层 引擎层主要分为两类:InnoDB.MyIsam(使用show engines;查看) InnoDB是事务优先的,会进行行锁,适合高并发操作 MyI ...

  5. MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第一章: ...

  6. Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)

    这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...

  7. mysql的MGR集群

    MySQL 是目前最流行的开源关系型数据库,国内金融行业也开始全面使用,其中MySQL 5.7.17 提出的 MGR(MySQL Group Replication)既可以很好的保证数据一致性又可以自 ...

  8. mysql架构组成_第 2 章 MySQL 架构组成

    麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...

  9. 深入解读 MySQL 架构设计原理,剖析存储架构选型核心

    孙玄,江湖人称"玄姐",前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的,以及他们是如何玩转 My ...

最新文章

  1. 不好意思,食言而肥了
  2. win10无法连接到Windows(SENS)服务网络连不上怎么办
  3. 2018年区块链技术发展总结与展望(附报告全文) | 起风研究院
  4. 华为交换机配置Telnet
  5. 远程桌面上的文件复制到本地
  6. 图片轮播,纯js+css
  7. 【转】正确认识动脉压力波形
  8. matlab subs 慢,求助matlab程序计算速度过慢的原因
  9. linux如何修改用户标识符,linux 修改文件标识符
  10. numpy: np.random.get_state()
  11. 找不到列 dbo 或用户定义的函数或聚合_Power BI 的大数据处理方案:聚合
  12. 华为5G专利收费标准曝光!原来卖专利真的很挣钱
  13. 单片机C语言九个重要的知识点总结
  14. 通信基站中AAU与RRU的功能和区别是什么?
  15. python计算斜率以及给定一组点两两求斜率
  16. 一个程序员分享8年的开发经验
  17. 小程序input的type属性 text、number、idcard、digit
  18. APP运营推广那点事
  19. Vue绑定<audio>/<video>标记的muted属性无效问题随记
  20. MTK介绍MTK平台介绍

热门文章

  1. python列表写入txt文件中文乱码,python 字典格式的文本写入文件,中文乱码(Unicode)的问题...
  2. react手机号码344格式分割
  3. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))
  4. 搜狗输入法的使用感受与评价
  5. PAP与CHAP认证
  6. windows禁用f1按键
  7. fluent支持python吗_Python与Fluent联合仿真设置
  8. 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记
  9. UTC时间与北京时间
  10. 《新科学家》:十大最不可思议计算机