050、事务设计之Percolator事务模型

Percolator 背景

在这里插入图片描述

  • Bigtable: 大表打散每行到各个节点,每一行作为一个kv。
  • 解决的问题
    一个事务涉及的行在多个节点,如何用单行对一个事务进行控制,实现原子性。

快照隔离级别(snapshot )

在这里插入图片描述
白色点:代表事务开始时间
黑色点:代表事务结束时间

事务2是不能看到事务1的修改(事务2的开始时间是早于事务1的提交时间)
事务3的开始时间是晚于事务1和事务2的提交时间,所以都能看到。

快照隔离级别类似可重复读,事务能读到的数据都是事务开始那一刻能看到的数据。

分布式时钟

分布式时钟: 给事务分配时间标识
在这里插入图片描述

Percolator 事务执行流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
primary key: 选择任一一行作为主行,这里不是说主键
在这里插入图片描述
prewrite
其它行也加锁(但这个锁的内容是指向主行),所以真正的锁只有一把在主行上。
如果此时其它行 无法加这个锁,则表示其他行正在被其它事务写入,则此时当前这个事务会报错,把指向的主行上面的锁也清掉。 (相当于整个分布式事务直接回滚)
在这里插入图片描述

Percolator 案例

  • 修改数据
    在这里插入图片描述
  • prewrite
    在这里插入图片描述
  • 提交主行

在这里插入图片描述

  • 主行提交完毕,提交其它行
    在这里插入图片描述
    如果主行提交完成,其它行提交异常(数据库down了),其实是不影响事务的一致性。因为重新发起事务后,发现上面有个锁(记录主锁信息)发现主锁已经清理,则此时会将lock当中的信息清掉,保持其他行已提交。

优缺点

  • 优点
    • 实现简单
    • 基于单行的事务基础上,实现了跨行事务
    • 去中心化的锁管理
  • 缺点
    • 需要管理中心化的版本号
    • 网络交互较多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/28656.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask基本用法小白教程+按钮跳转到指定页面+python和pip安装(后附)

一、flask学习教程: 1.1 基本程序: 大家可以在pycharm中复制如下代码,先感受一下flask的基本用法: 点击链接可进入浏览器查看程序运行的结果,在127.0.0.1:5000后面添上/test1/等设定的文字,可查看不同函…

[RocketMQ] Broker CommitLogDispatcher 异步构建ConsumeQueue和IndexFile源码解析 (十四)

CommitLogDispatcherBuildConsumeQueue: 异步构建ConsumerQueue。CommitLogDispatcherBuildIndex: 异步构建IndexFile。 文章目录 1.CommitLogDispatcherBuildConsumeQueue构建ConsumeQueue1.1 putMessagePositionInfo写入消息位置信息1.2 findConsumeQueue查找ConsumeQueue1.2…

flutter开发实战-卡片翻转动画效果Transform+IndexedStack+rotateAnimation

flutter开发实战-实现卡片翻转动画效果 之前开发中遇到了商品卡片翻转,商品正面是商品图片、商品名称;背面是商品价格,需要做卡片翻转动画。 动画实现即:在一段时间内,快速地多次改变UI外观;由于人眼会产生…

单例模式、指令重排序、锁、有序性

今天在回顾单例模式时,我们都知道懒汉式单例中有一种叫做双重检查锁的单例模式。 我们来看下下面的代码有没有问题: 这段代码我们可以看到,即优化了性能,在多线程情况下,如果实例不为空了,则直接返回了。…

[element-ui] el-select,虚拟滚动(vue-virtual-scroll-list)

一、问题描述 表单中某下拉框,由于数据过多,选择的时候会因为数据量过大导致页面卡顿,于是对于el-select进行二次封装,实现虚拟滚动。 二、实现如下: 看起来是加载了全部数据,实际上只加载了自己设定的1…

无需学习Python,一个公式搞定领导想看的大屏

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 不要让“做不了”成为数字化转型的障碍 随着数字化的脚步加快,越来越多的企…

Spring Batch之读数据库—JdbcCursorItemReader之自定义PreparedStatementSetter(三十八)

一、自定义PreparedStatementSetter 详情参考我的另一篇博客: Spring Batch之读数据库——JdbcCursorItemReader(三十五)_人……杰的博客-CSDN博客 二、项目实例 1.项目实例 2.代码实现 BatchMain.java: package com.xj.dem…

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了,使用离线安装包就需要自己手动制作一个; 以vs2019为例: 先去官网下载在线安装器 官网下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…

从小白到大神之路之学习运维第62天--------Ansible自动化运维工具(playbook配置深入了解2.0)

第三阶段基础 时 间:2023年7月17日 参加人:全班人员 内 容: playbook配置深入了解2.0 目录 一、角色 实验案例:(安装Mariadb) 二、变量 (一)在playbook中使用自定义变量&#xff1…

STM32芯片型号命名规则

意法半导体STM32和STM8系列的芯片可以通过下面一张图来确定芯片的各项参数,帮助选型。 STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下: ![在这里插入图片描述](https:…

文心一言 VS 讯飞星火 VS chatgpt (61)-- 算法导论6.4 5题

文心一言 VS 讯飞星火 VS chatgpt (61)-- 算法导论6.4 5题 五、证明:在所有元素都不同的情况下,HEAPSORT 的时间复杂度是 Ω (nlgn)。 文心一言: 要证明在所有元素都不同的情况下,HEAPSORT 的时间复杂度是 Ω(n log…

青岛大学_王卓老师【数据结构与算法】Week05_14_队列的顺序表示和实现2_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…