MYSQL--架构--MGR--理论--04--事务和冲突检测机制
MYSQL–架构–MGR–理论–04–事务和冲突检测机制
1、MGR 集群中事务的生命周期
1.1、MGR集群(MGR 组复制 技术示意图)
- MGR集群由DB1,DB2,DB3构成
- 集群中每个DB都有 MGR层
1.1.1、MGR层功能组成
- Paxos模块
- 基于 Paxos 算法确保所有节点收到相同广播消息
- 广播消息的内容结构:transaction message
- Certify模块(冲突检测)
- 进行冲突检测确保数据最终一致性
- 冲突检测中内存结构:certification info
1.2、MGR 集群中事务的生命周期
- 当 DB1 上有 事务T1 要执行时,T1 对 DB1 是来说本地事务,对于 DB2、DB3 来说是远端事务。
- DB1 上在 事务T1 在被执行后,会把执行 事务T1 信息广播给集群各个节点,包括 DB1 本身,通过 Paxos模块 广播给 MGR集群 各个节点,半数以上的节点同意并且达成共识,之后共识信息进入各个节点的 certify模块(冲突检测),各个节点各自进行冲突检测验证,最终保证事务在集群中最终一致性。
- 在冲突检测通过之后:
- 本地 事务T1 在 DB1 直接提交即可,否则直接回滚。
- 远端 事务T1 在 DB2 和 DB3 分别先更新到 relay log,然后应用到 binlog,完成数据的同步,否则直接放弃该事务。
2、transaction message
广播消息的内容结构
2.1、结构
2.2、说明
2.2.1、write set
- 写入集合
- 是事务更新行相关信息的Has 值
- write set=Hash(库名+表名+主键(唯一键)字段信息)
2.2.2、gtid_executed
- 已经执行过的事务 gtid 集合,即事务快照版本。
2.2.3、transaction_context_log_event
- 事务上下文信息
- 由下面内容组成
- write set
- gtid_executed
2.2.4、gtid_log_event
- 已经执行过的事务 gtid 集合。
2.2.5、log_event_group
- 事务日志信息
- 后续要更新到 relay log 中。
3、certification info
- 每个MGR节点都有一个 certification info 的内存结构
- certification info 保存了通过冲突检测的事务的 write set 和 gtid_executed。
3.1、结构
ertification info 相当于一个 map
3.1.1、key
- string 结构
- 保存 write set中提取的主键值
- Hash(库名+表名+主键(唯一键)字段信息)
3.1.2、value
- set 集合
- 保存 gtid_executed 事务快照版本。
3.2、举例
T1 事务,T1 更新 d1数据库 t1表 中id=1 和 id=2的两行数据,它对应快照版本 UUID_MGR 是 :1-100,刚开始 certification info 为空,所以直接提交,之后 certification info 中快照版本直接更新为 1-101。
4、冲突检测机制
- 冲突检测通过标准
- 单事务 写入时冲突检测机制
- 多事务 写入时冲突检测机制
4.1、冲突检测通过标准
若 transaction UUID_MGR >= certification info UUID_MGR,则冲突检测通过。
5、单事务 写入时冲突检测机制
5.1、举例
- 事务T2,更新 id=2 的行
- 事务T2 的 UUID_MGR 为 1-102
- 节点中冲突检测模块中的 certification info 中的 UUID_MGR 为 1-101
- 3.2举例中已经变为1-101
- T2的UUID_MGR:1-102>UUID_MGR:1-101,则 T2 冲突检测通过
- 将UUID_MGR变为1-103
- 事务T3,更新 id=1 的行
- 事务T3 的 UUID_MGR 为 1-100
- 节点中冲突检测模块中的 certification info 中的 UUID_MGR 为 1-101
- 3.2举例中已经变为1-101
- T3的UUID_MGR:1-100 < UUID_MGR:1-101,则 T3 冲突检测通过
- T3事务丢弃
6、多事务 写入时冲突检测机制
6.1、原则
- 多个事务修改同一个 id 对应的数值,需要按照先后顺序进行冲突检测。
- 多个事务同时对不同的 id 进行修改,各自进行修改即可。
- 不同的事务对同一个 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 的行
- 事务T4 的 UUID_MGR 为 1-102
- 节点中冲突检测模块中的 certification info 中 id=1 的 UUID_MGR 为 1-101
- T2的UUID_MGR:1-102>UUID_MGR:1-101,则 T4 冲突检测通过
- 更新为 certification info 中 UUID_MGR 为 1-103。
6.2.2、事务 T5,更新 id=1 的行
- 事务T5 的 UUID_MGR 为 1-100
- 节点中冲突检测模块中的 certification info 中 id=1 的 UUID_MGR 为 1-103
- T5的UUID_MGR:1-100 < UUID_MGR:1-102,则 T5 冲突检测不通过。
6.2.3、事务 T6,更新 id=3 的行
- 事务T6 的 UUID_MGR 为 1-100
- 节点中冲突检测模块中的 certification info 中 id=3 的 UUID_MGR 为空
- T6的 UUID_MGR:1-100>UUID_MGR,则 T6 冲突检测通过
- 更新为 certification info 中 UUID_MGR 为 1-101。
6.3、举例–最终结果
事务T4和事务T5并行修改 id=1,T4 写入成功,T5 丢弃,T6 写入 id=3 事务,写入成功。
MYSQL--架构--MGR--理论--04--事务和冲突检测机制相关推荐
- MySQL的存储引擎、事务和锁机制
1.什么存储引擎 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧,锁定水平等功能,使用不同的存储引 ...
- 第04章 逻辑架构【1.MySQL架构篇】【MySQL高级】
第04章 逻辑架构 前言 推荐 第04章 逻辑架构 1. 逻辑架构剖析 1.1 服务器处理客户端请求 1.2 Connectors 1.3 第1层:连接层 1.4 第2层:服务层 1.5 第3层:引擎 ...
- mysql事务的优点和缺点_OLTP应用之MySQL架构选型--图文教程
在我们下定决心将企业核心应用从企业级数据库迁移到开源数据库产品.使用本地磁盘代替共享存储之前.我觉得我们必须要面对并回答以下几个问题之后才能真正的将开源进行到底,将想法付诸于实践. 下面我们来看一下我 ...
- 数mysql据分析优化_从零开始学习数据分析-mysql架构与优化理论
mysql的逻辑分层:连接层 服务层 引擎层 存储层 引擎层主要分为两类:InnoDB.MyIsam(使用show engines;查看) InnoDB是事务优先的,会进行行锁,适合高并发操作 MyI ...
- MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新
Mysql架构体系全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第一章: ...
- Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)
这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...
- mysql的MGR集群
MySQL 是目前最流行的开源关系型数据库,国内金融行业也开始全面使用,其中MySQL 5.7.17 提出的 MGR(MySQL Group Replication)既可以很好的保证数据一致性又可以自 ...
- mysql架构组成_第 2 章 MySQL 架构组成
麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...
- 深入解读 MySQL 架构设计原理,剖析存储架构选型核心
孙玄,江湖人称"玄姐",前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的,以及他们是如何玩转 My ...
最新文章
- java流处理为什么快_“任何情况下,都不可以堕胎”是道德普遍主义的观点。
- Matlab和Python(Numpy,Scipy)与Lapack的关系
- Linux Ubuntu常用命令
- [BUUCTF-pwn]——picoctf_2018_echo back
- 如何成为数据科学家_成为数据科学家的5大理由
- mysql数据库中case when 的用法
- 2.学习管理系统项目学习一
- Linux系统怎么安装谷歌拼音,linux下安装google拼音输入法
- ubuntu下安装万能五笔
- 基于FPGA的图像浮雕效果实现
- javaS的tring和androidS的tring区别是什么?
- opensips服务器环境搭建
- Synchronized你以为你真的懂?
- 2.23 haas506 2.0开发教程 - KeyPad - 矩阵键盘(仅支持M320开发板)
- 公共经济学(期末复习资料)
- ​证件照怎么换底色?分享一个快速换底色的方法
- 解决 soctherm: OC ALARM 0x00000001 错误
- 互动百科变快懂百科,纳入字节抖音旗下后要爆发了?
- 产品经理:销售、协作和产品
- XRecyclerView、Okhttp
热门文章
- 为什么OpenCV计算的帧率是错误的?
- 新浪微博的页面解析思考
- 华为公司员工待遇全面揭秘 选择自 CQP 的 Blog
- Android:高仿百度外卖、美团、淘点点二级联动效果!
- 香港室内设计公司【Junee】申请纳斯达克IPO上市,募资2500 万美元
- 出现`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js`报错
- android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏
- [Fabric] 第11章 Fabric CA应用与配置
- 近期中国移动用户无法访问csdn博客
- 孪生素数【函数实现】