博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVCC的一种实现方案
阅读量:5112 次
发布时间:2019-06-13

本文共 856 字,大约阅读时间需要 2 分钟。

源信息来源:

--

简单描述:

一个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空间只存储最新的版本,之前的版本存储在另一个地方,且存储老版本的空间大小固定。最新的版本会指向老版本,可以由此上溯到之前的任意版本。由于空间固定,太早的版本会被移除。某个事物可能因为找不到指定版本的数据而失败。

--

 

转载于:https://www.cnblogs.com/snake-hand/p/3174519.html

你可能感兴趣的文章
四边形面积探索
查看>>
曾有一个人,爱我如生命(2)
查看>>
POJ3264
查看>>
日常记录
查看>>
抽象工厂模式(abstract factory)
查看>>
QueueAPI记录
查看>>
Luogu P1538 迎春舞会之数字舞蹈 | 模拟
查看>>
uva 562
查看>>
Python程序使用pyinstaller打包
查看>>
数组举例
查看>>
【代码笔记】Web-HTML-布局
查看>>
MySql和Oracle数据库区别
查看>>
Nginx配置详解
查看>>
向学,相遇。
查看>>
oracle常用函数
查看>>
显示器变蓝色和图像偏移的解决办法
查看>>
mysql应用实例
查看>>
docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
查看>>
wineqq中接收文件的查看与移动
查看>>
(12)javascript 面向对象 理解对象
查看>>