减少索引维护开销的多版本管理方法技术

技术编号:12587371 阅读:80 留言:0更新日期:2015-12-24 04:08
本发明专利技术公开了一种减少索引维护开销的多版本管理方法,在数据库表格中存放记录的不同版本,数据库系统提取存放记录的物理ID;所述数据库表格中设有一个以上的索引,赋予每个记录一个逻辑ID,索引的叶子节点保存记录的逻辑ID;建立逻辑ID到物理ID的映射表,同时维护逻辑ID到物理ID的映射表。本发明专利技术简化了索引的维护开销,提高事务处理的吞吐量。

【技术实现步骤摘要】

本专利技术涉及一种,属于数据库管理

技术介绍
数据库的并发控制,其目的是在多个用户同时存取同一个数据对象时,协调这些操作,保证数据的一致性。比如一个账户的余额是100,用户a读取余额,增加10元,写入新则值为110。在用户a读取账户余额后,用户b也读取该余额,为100元,他增加20元,在用户a写入110元后,用户b写入120元。最终余额为120元,这是一个错误的值。正确的值应该为130元。并发控制的目的,就是协调上述用户对数据的操作,保证数据的一致性。并发控制方法有两类,一类是加锁机制,事务(用户发起的任务)在读取数据之前,加读锁(Read Lock),在写入数据之前加写锁(Write Lock)。如果数据上已经有读锁,可以在其上加新的读锁,但是不能加写锁。如果数据上已经有写锁,则新的写锁和读锁都不能加在数据上。通过加锁,可以实现不同用户对同一数据对象的操作。并发控制的另外一类技术是多版本管理,读事务读取最近的某个数据对象的提交版本,而写事务则写入一个新版本,等到事务提交的时候,新版本成为新的最近提交的版本,固化下来。多版本管理机制,解除了读写事务之间的冲突,有利于提高系统的并发度,即同一时间执行的事务的数量,或者吞吐能力。但是需要付出版本管理的空间开销,在目前存储空间富裕的情况下,这个代价是值得的。现有的多版本管理方法,一般在数据库表格文件中存放记录的不同版本,这些版本用链表链接起来。如果这个数据库表格有若干个索引,比如基于用户ID字段的索引、基于日期字段的索引等,这些索引一般采用B+树形式,支持事务处理,以及支持点查询和范围查询。索引树的叶子节点通过记录ID (Row ID)连接到数据文件的具体记录,然后通过链表可以访问数据的所有的版本。如果一个表格拥有若干索引,对表格进行数据增删改的时候,这些索引都需要进行维护,即进行相应的修改,需要付出时间开销,从而降低系统的事务吞吐能力。
技术实现思路
本专利技术针对上述问题的不足,提出一种,该方法简化了索引的维护开销,提高事务处理的吞吐量。本专利技术为解决上述技术问题提出的技术方案是:—种,在数据库表格中存放记录的不同版本,数据库系统提取存放记录的物理ID ;所述数据库表格中设有一个以上的索引,赋予每个记录一个逻辑ID,索引的叶子节点保存记录的逻辑ID ;建立逻辑ID到物理ID的映射表,同时维护逻辑ID到物理ID的映射表:当更新一个记录的时候,在数据库表格中生成新的一个记录,链表指向新记录的物理ID ;同时,映射表做相应的更新,把更新前相应的记录的逻辑ID映射到新记录的物理ID ;当一个记录被删除,映射表里的该记录对应的逻辑ID到物理ID的映射条目被删除;在进行索引扫描时,通过索引找到具体的数据记录,由于映射表没有这样的映射,所以删除的记录将不被检索到;而索引叶节点上的无效的逻辑ID可以在访问该索引的时候,再进行删除;对于删除以后,就从来没有被访问过的记录,需要一个脱机的处理过程,统一地把索引里面,没有出现在映射表中的逻辑ID全部删除掉;当增加一个记录的时候,记录增加到数据库表格的末尾,数据库系统提取其物理ID,同时对该记录赋予一个新的逻辑ID,该物理ID和新的逻辑ID进行关联,加入到映射表;除了更新映射表的条目,所有的索引都需要用新的逻辑ID进行更新;在进行索引扫描的时候,通过索引访问数据库表格时,需要根据映射表,把逻辑ID转换成物理ID,然后根据物理ID找到其对应的记录;如果物理ID为空、或者映射表没有该逻辑ID的条目,则表明某个记录已经被删除,扫描过程忽略这样的记录即可。所述索引包括基于用户ID字段的索引、基于日期字段的索引。优选的:所述索引采用B+树形式;所述B+树的阶数为k(K〉= 3),树形结构的内部节点包括分割键值key和指向子节点的指针。优选的:所述映射表中记录逻辑ID、最近提交的版本的物理ID、最近未提交的版本的物理ID、下一个历史提交版本的指针。优选的:所述映射表带有一个辅助数据结构,以链条的方式保存记录的历史提交版本。优选的:对当前已经提交的版本读写数据的方法:对当前已经提交的版本读数据的时候,在当前已经提交的版本上加读锁,当前提交版本通过从映射表的最近已经提交版本物理ID进行提取即可,该ID可以直接用于找到记录的确切的物理位置;对当前已经提交的版本写数据的时候,对当前已经提交的版本上加写锁,生成新的一个未提交的版本;对当前已经提交的版本确认写入,进行事务收尾工作时,首先对记录施加一个确认锁,只需把写锁进行升级就可以了 ;事务提交时,新提交的记录版本成为最近提交的版本,所有的读锁、写锁释放掉,历史提交版本被迀移到历史版本缓冲区,缓冲区需要保存记录的物理ID和链接关系,新提交的记录版本保存在数据文件中。本专利技术的一种,相比现有技术,具有以下有益效果:(I)利用记录的逻辑ID到物理ID的映射关系,把索引和记录的物理表示进行解耦(Decouple),简化对数据库表格进行增删改等操作时,需要对索引进行的维护操作,从而提高事务处理的吞吐量。(2)围绕上述映射关系设计的并发控制方法,不仅提供了读取未提交数据(Uncommitted)、读取提交数据(Committed)、可以重复读(Repeatable Read)等重要的事务隔离级别,而且通过解除读事务和写事务的等待关系(在加锁机制中,一个事务对数据进行与入,另外一个事务是不能进行读取的),极大提尚事务吞吐能力。。【附图说明】图1是本专利技术B+树的结构示意图;图2为本专利技术映射关系不意图;其中,空白圆圈表示逻辑ID,横纹圆圈表示物理ID (最近提交),竖纹圆圈表示物理ID (最近未提交),斜纹圆圈、反斜纹圆圈表示各历史提交版本。而方形则表示数据文件里的具体的记录。【具体实施方式】附图非限制性地公开了本专利技术一个优选实施例的结构示意图,以下将结合附图详细地说明本专利技术的技术方案。实施例—种,在数据库表格中存放记录的不同版本,数据库系统提取存放记录的物理ID ;所述数据库表格中设有一个以上的索引,赋予每个记录一个逻辑ID,索引的叶子节点保存记录的逻辑ID ;所述索引包括基于用户ID字段的索引、基于日期字段的索引。所述索引采用B+树形式;所述B+树的阶数为K (K〉= 3),树形结构的内部节点包括分割键值key和指向子节点的指针。建立逻辑ID到物理ID的映射表,同时维护逻辑ID到物理ID的映射表。所述映射表中记录逻辑ID、最近提交的版本的物理ID、最近未提交的版本的物理ID、下一个历史提交版本的指针。所述映射表带有一个辅助数据结构,以链条的方式保存记录的历史提交版本。 当更新一个记录的时候,在数据库表格中生成新的一个记录,链表内得到新记录的物理ID ;同时,映射表做相应的更新,把更新前相应的记录的逻辑ID映射到新记录的物理ID ;当一个记录被删除,映射表里的该记录对应的逻辑ID到物理ID的映射条目被删除;在进行索引扫描时,通过索引找到具体的数据记录,由于映射表没有这样的映射,所以删除的记录将不被检索到;而索引叶节点上的无效的逻辑ID可以在访问该索引的时候,再进行删除;对于删除以后,就从来没有被访问过的记录,需要一个脱机的处理过程,统一地把索引里面,没有出现在映射表中的逻辑ID全部删除掉;当增本文档来自技高网
...

【技术保护点】
一种减少索引维护开销的多版本管理方法,其特征在于:在数据库表格中存放记录的不同版本,数据库系统提取存放记录的物理ID;所述数据库表格中设有一个以上的索引,赋予每个记录一个逻辑ID,索引的叶子节点保存记录的逻辑ID;建立逻辑ID到物理ID的映射表,同时维护逻辑ID到物理ID的映射表:当更新一个记录的时候,在数据库表格中生成新的一个记录,链表指向新记录的物理ID;同时,映射表做相应的更新,把更新前相应的记录的逻辑ID映射到新记录的物理ID;当一个记录被删除,映射表里的该记录对应的逻辑ID到物理ID的映射条目被删除;在进行索引扫描时,通过索引找到具体的数据记录,由于映射表没有这样的映射,所以删除的记录将不被检索到;而索引叶节点上的无效的逻辑ID可以在访问该索引的时候,再进行删除;对于删除以后,就从来没有被访问过的记录,需要一个脱机的处理过程,统一地把索引里面,没有出现在映射表中的逻辑ID全部删除掉;当增加一个记录的时候,记录增加到数据库表格的末尾,数据库系统提取其物理ID,同时对该记录赋予一个新的逻辑ID,该物理ID和新的逻辑ID进行关联,加入到映射表;除了更新映射表的条目,所有的索引都需要用新的逻辑ID进行更新;在进行索引扫描的时候,通过索引访问数据库表格时,需要根据映射表,把逻辑ID转换成物理ID,然后根据物理ID找到其对应的记录;如果物理ID为空、或者映射表没有该逻辑ID的条目,则表明某个记录已经被删除,扫描过程忽略这样的记录即可。...

【技术特征摘要】

【专利技术属性】
技术研发人员:周晓云覃雄派
申请(专利权)人:江苏师范大学中国人民大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1