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

    --

  • 相关阅读:
    变量的含义,内存管理机制,数据类型的含义
    操作系统、应用程序的含义,编程语言的优缺点
    Pycharm常用快捷键
    计算机组成及原理
    仿酷狗音乐播放器开发日志——整体框架分析
    仿酷狗音乐播放器开发日志——整体框架分析
    c++与java的优缺点
    c++与java的优缺点
    unicode ansi utf-8 unicode_big_endian编码的区别
    unicode ansi utf-8 unicode_big_endian编码的区别
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3174519.html
Copyright © 2020-2023  润新知