MVCC的一种实现方案
源信息来源:http://my.oschina.net/juliashine/blog/111624
--
简单描述:
一个data-server,通过mvcc来实现事务的一致性,已支持更高的吞吐和更低的lantency。
--
每个Transaction(简称Trx)分配一个版本XID。XID是全局维护的递增ID。
每个Data Item(相当于DB table的一行),有两个标记分别是XMIN和XMAX。表示此数据项在XMIN时创建,在XMAX删除,如果XMAX未赋值,则表示创建以来还没删除。
Server维护一个当前所有未提交的XID列表。
--
更新操作insert、delete、modify的流程:
insert时,将自己的事务XID赋值给数据项的XMIN,XMAX赋值为无值。
delete时,将自己的事务XID赋值给数据项的XMAX。
modify时,通过delete+insert来模拟,也就是将自己的XID赋值给当前数据项的XMAX,然后新增一个新的数据项,赋值其XMIN为XID,并赋值XMAX为无值。
--
查询操作流程:
如果数据项的XMIN小于等于当前事务的XID,XMAX为无值或者是大于XID或者在未提及事务列表XID集合中,则此数据项可见。
--
如上显然会存在较多的废弃数据,如何移除这些数据需要特别考虑。
移除不可见数据两种方法,分别在postgreSQL和Oracle使用了。
方法1. postgreSQL
所有版本的data item都存在同一个key-value空间,对版本数量不限制。通过一个后台进程来回收老版本的数据。回收计划可以在读、写时触发,或者定期调度。
方法2. oracle、innodb
主key-value空间只存储最新的版本,之前的版本存储在另一个地方,且存储老版本的空间大小固定。最新的版本会指向老版本,可以由此上溯到之前的任意版本。由于空间固定,太早的版本会被移除。某个事物可能因为找不到指定版本的数据而失败。
--
MVCC的一种实现方案的更多相关文章
- 总结:视频播放的四种实现方案(Native)
一.来自 AVFoundation的 AVPlayer对象 特点: 1. AVPlayer > 优点: 可以自定义UI, 进行控制 > 缺点: ...
- 转【实战体验几种MySQLCluster方案】
实战体验几种MySQLCluster方案 1.背景 MySQL的cluster方案有很多官方和第三方的选择,选择多就是一种烦恼,因此,我们考虑MySQL数据库满足下三点需求,考察市面上可行的解决方案: ...
- 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队 ...
- [转CSDN多篇文章]WEB 3D SVG CAD 矢量 几种实现方案
WEB 3D SVG CAD 矢量 几种实现方案 原创 2014年10月24日 08:34:11 标签: WEB3D / CADSVG / 矢量 2665 一.全部自己开发,从底层开始 VML+SVG ...
- 分布式唯一ID的几种生成方案
前言 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等.那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十 ...
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- JavaScript常用八种继承方案
更新:在常用七种继承方案的基础之上增加了ES6的类继承,所以现在变成八种啦,欢迎加高级前端进阶群一起学习(文末). --- 2018.10.30 1.原型链继承 构造函数.原型和实例之间的关系:每个构 ...
- PHP四种序列化方案
原文地址:https://t.ti-node.com/thread/... 数据的序列化是一个非常有用的功能,然而目测很多人跟我一样,在刚接触这玩意的时候压根就不理解这货色到底是干啥用的,反正老师说了 ...
- 分布式全局ID的几种生成方案
前言 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等. 那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是 ...
随机推荐
- Linux特殊权限
************************ ACL权限 ****************************************** acl权限的出现是为了弥补用户权 ...
- WebStorm shortcuts.
- NPM环境搭建
1. NPM全局路径:配置npm包的安装位置,在你的用户文件夹下,新建.npmrc文件:cache=D:\NodeJs\nvm\npm-cache 表示缓存文件夹 prefix=D:\NodeJs\n ...
- zepto源码研究 - callback.js
简要:$.Callbacks是一个生成回调管家Callback的工厂,Callback提供一系列方法来管理一个回调列表($.Callbacks的一个私有变量list),包括添加回调函数, 删除回调函数 ...
- C++函数覆盖的思考
最近碰到一些问题,一开始很难调试和解决,最后发现原来是在基类函数的模板方法中对子类需要重写的函数没有使用virtual,如下 class Base { public: void say(){test( ...
- 跨控制器操作-thinkphp
用A函数 或者 $use=new IndexController(); A跨控制器 $data->A("Admin/Index")//admin下面的index控制器 $da ...
- winform批量查询单号剔除重复
//查询分单函数 private string GetQueryInSubbillNo() { string strSubbillNO = " ...
- Python自动化运维之20、HTML
一.HTML相关概念 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这 ...
- twisted(1)--何为异步
早就想写一篇文章,整体介绍python的2个异步库,twisted和tornado.我们在开发python的tcpserver时候,通常只会用3个库,twisted.tornado和gevent,其中 ...
- django HttpRequest
request.path 除域名以外的请求路径,以正斜杠开头 "/hello/" request.get_host() 主机名(比如,通常所说的域名) "127.0.0. ...