多版本数据索引的更新、删除与建立方法及装置的制造方法

文档序号:9751000阅读:267来源:国知局
多版本数据索引的更新、删除与建立方法及装置的制造方法
【技术领域】
[0001] 本发明涉及数据库技术领域,尤其涉及多版本数据索引的更新、删除与建立方法 及装置。
【背景技术】
[0002] 在数据存储系统中,为了提高数据的并发性、可靠性和可追溯性,会对同一个数据 保存多个版本,也就是当数据存储系统对某个数据做一个更新操作时,并不是将该数据的 历史版本(Old version)删除,再将该数据的新版本覆盖上去,而是将历史版本做一个标记 以便与新版本进行隔离,然后再新增新版本完成更新,因此该数据的历史版本和新版本都 存在于数据存储系统中,其中新版本亦称为当前版本。数据的历史版本和当前版本都存储 于数据存储系统中,发生的操作便可以根据需要读取合适的版本,这样虽在然有利于数据 的追溯,提高数据的可靠性,但当发生并发操作时,数据的一致性便成为大问题,为防止出 现脏读(Dirty Read)和幻读(Phantom Read)等错误,数据存储系统通常采用MVCC(Multi_ Version Concurrency Control,多版本并发控制)机制来进行并发操作的处理。
[0003] MVCC的实现主要有以下方式:
[0004] 1、使用堆加索引的存储结构,堆存储于内存之中。以PostgreSQL为例,采用堆加 B+ 树索引的存储结构,堆中数据包含版本信息,PostgreSQL将数据的最新版本或历史版本都 存储在堆中。堆中每条数据头上记录t_xmir^Pt_xmax两个属性,分别表示创建与删除这一 版本的事务ID,另外记录1:_〇1: id属性,表示该数据下一个更新的版本的RID (Row I dent i f i cat ion,行标识),由此数据的多个版本构成从最老到最新的单向链表。删除一条 数据时,设置t_xmax,并不将数据真正删除;更新一条数据时,是插入一个新版本,将被更新 的版本的丨_1111 &1设为当前事务的ID,并设置被更新的版本的丨_(^1(1指向插入的新版本。数 据的所有版本都在索引中存在对应的索引项,但索引中则不包含版本信息。
[0005] 2、采用索引组织表的存储结构,没有堆,数据存储在主键索引中,主键索引的每个 索引项都包含所对应数据的主键,其它索引称为二级索引。主键索引拥有版本信息,但只存 储数据的最新版本,历史版本的信息则集中存储在回滚段中。主键索引数据的头上包含有 事务ID与指向回滚段中历史版本的指针,回滚段中的历史版本信息中也包含指向更前的历 史版本的指针,即版本链表是从新到旧的,删除数据时只是对数据进行删除标记而不真正 地删除,更新数据时对数据进行本地更新,并将数据的前像(更新前的版本)写到回滚段中。 二级索引存储每条数据的多个版本对应的索引项,每个索引项并不包含版本信息。
[0006] 上述MVCC实现的第一种方式中,数据存在多个版本,而索引只有一个,删除数据 时,不能删除索引,因此随着更新的增加,索引会存储许多无用的节点,导致检索效率越来 越低。另外,数据查询都是只扫描索引,直接从索引中返回所需的属性,由于索引中完全没 有版本信息,第一种方式不能实现覆盖索引扫描(Coverage Index Scan)。上述MVCC实现的 第二种方式,主键索引数据通过头上指向回滚段中历史版本的指针来与各个版本串联,需 要读取最新版本才能得到次新版本,而且进行事务回滚时需要清理事务所作的所有修改, 可能会导致回滚很慢,因而数据的访问效率低,再者二级索引也不包含版本信息,不能实现 覆盖索引扫描。另外,上述两种方式都专门应用于数据存储系统的事务并发,数据的各个版 本中需要包含事务编号等信息,而数据存储系统中需要的版本信息往往要简单很多,两种 方式的数据结构都很复杂,开销大,索引检索效率低,更新和删除等处理效率低,不适用于 只处理基本读写并发的情况。

【发明内容】

[0007] 本发明实施例提供了一种多版本数据索引的更新、删除与建立方法及装置,以解 决数据存储系统基本读写并发处理中索引检索效率低的问题。
[0008] 第一方面,本发明实施例提供一种多版本数据索引的更新方法,包括:
[0009] 根据被更新数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个 版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
[0010] 将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的 索引层中;
[0011] 将被更新数据对应的新索引项写入对应于最新版本数据的索引层中,
[0012] 其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次 序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本 设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
[0013] 结合第一方面,在第一方面第一种可能的实现方式中,若一个索引层对应于一个 版本次序,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对 应的索引层中,包括:
[0014] 对所述多个索引项中的每个索引项ai,判断多层索引中&1所在的原始索引层是否 存在下一层索引层;
[0015] 若&1所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索 弓丨层中,并删除所述原始索引层中的a 1;
[0016] 若&1所在的原始索引层不存在下一层索引层,则删除m,
[0017] 其中,i = l……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次 序与ai所在原始索引层所对应的版本次序相邻,且旧于 &1所在原始索引层所对应的版本次 序。
[0018] 结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,所 述的多版本数据索引的更新方法,以数据的当前版本为最新的版本,数据的η个版本的新旧 次序依次按照从新到旧的顺序预先设定为1、2……η,所述多层索引,包括η层索引,其中,第 η层索引中索引项对应的数据的版本次序为η,
[0019] 所述若&1所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一 层索引层中,包括:
[0020] 将&1写入tal+l层索引层中,其中,tal为所述原始索引层对应的版本次序,t al小于 n〇
[0021] 结合第一方面,在第一方面第三种可能的实现方式中,,若多层索引中存在对应于 多个版本次序的索引层,所述将所述多个索引项分别移动至与其表征数据版本的特征结构 或特征信息对应的索引层中,包括:
[0022]对所述多个索引项中的每个索引项,判断多层索引中&1所在的原始索引层中是 否存在除&1以外的其他同数索引项,所述同数索引项属于所述多个索引项;
[0023]若&1所在的原始索引层中存在除&1以外的其他同数索引项,判断 ai是否为其所在 的原始索引层中最旧的同数索引项;
[0024]判断多层索引中&1所在的原始索引层是否存在下一层索引层;
[0025] 若&1所在的原始索引层中不存在除&1以外的其他同数索引项,且ai所在的原始索 引层存在下一层索引层,或者, ai所在的原始索引层中存在除&1以外的其他同数索引项,且 &1为其所在的原始索引层中最旧的同数索引项,且m所在的原始索引层存在下一层索引层, 则将写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的a 1;
[0026] 若&1所在的原始索引层中存在除&1以外的其他同数索引项,且&1不为其所在的原 始索引层中最旧的同数索引项,且 &1所在的原始索引层存在下一层索引层,则保持&1,将ai 所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
[0027] 若&1所在的原始索引层中不存在除&1以外的其他同数索引项,且ai所在的原始索 引层不存在下一层索引层,或者, ai所在的原始索引层中存在除&1以外的其他同数索引项 ak,且&1为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层 索引层,则删除所述原始索引层中的 ai;
[0028] 若&1所在的原始索引层中存在除&1以外的其他同数索引项,且&1不为其所在的原 始索引层中最旧的同数索引项,且 ai所在的原始索引层不存在下一层索引层,则保持&1,将 &1所在的原始索引层中最旧的同数索引项删除,
[0029] 其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同 数索引项对应的数据版本最旧的同数索引项,i = l……m,m为所述多个索引项的个数,所述 下一层索引层所对应的版本次序与所在原始索引层所对应的版本次序相邻,且旧于&1所 在原始索引层所对应的版本次序。
[0030] 第二方面,本发明实施例提供一种多版本数据索引的索引项删除方法,包括:
[0031] 根据被删除数据对应的多个版本数据的版本变化,分别更新多层索引中所述多个 版本数据对应的多个索引项中表征数据版本的特征结构或特征信息;
[0032] 将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对应的 索引层中,
[0033]其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次 序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本 设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
[0034]结合第二方面,在第二方面第一种可能的实现方式中,若一个索引层对应于一个 版本次序,所述将所述多个索引项分别移动至与其表征数据版本的特征结构或特征信息对 应的索引层中,包括:
[0035]对所述多个索引项中的每个索引项,判断多层索引中&1所在的原始索引层是否 存在下一层索引层;
[0036]若&1所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索 弓丨层中,并删除所述原始索引层中的a1;
[0037] 若&1所在的原始索引层不存在下一层索引层,则删除m,
[0038] 其中,i = l……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次 序与ai所在原始索引层所对应的版本次序相邻,且旧于 &1所在原始索引层所对应的版本次 序。
[0039] 结合第二方面,在第二方面第二种可能的实现方式中,若多层索引中存在对应于 多个版本次序的索引层,所述将所述多个索引项分别移动至与其表征数据版本的特征结构 或特征信息对应的索引层中,包括:
[0040] 对所述多个索引项中的每个索引项ai,判断多层索引中&1所在的原始索引层中是 否存在除 &1以外的其他同数索引项,所述同数索引项属于所述多个索引项;
[0041] 若&1所在的原始索引层中存在除&1以外的其他同数索引项,判断ai是否为其所在 的原始索引层中最旧的同数索引项;
[0042] 判断多层索引中&1所在的原始索引层是否存在下一层索引层;
[0043] 若&1所在的原始索引层中不存在除&1以外的其他同数索引项,且ai所在的原始索 引层存在下一层索引层,或者, ai所在的原始索引层中存在除&1以外的其他同数索引项,且 &1为其所在的原始索引层中最旧的同数索引项,且m所在的原始索引层存在下一层索引层, 则将写入所述原始索引层的下一层索引层中,并删除所述原始索引层中的a 1;
[0044] 若&1所在的原始索引层中存在除&1以外的其他同数索引项,且&1不为其所在的原 始索引层中最旧的同数索引项,且 &1所在的原始索引层存在下一层索引层,则保持&1,将ai 所在的原始索引层中最旧的同数索引项写入所述原始索引层的下一层索引层中;
[0045] 若&1所在的原始索引层中不存在除&1以外的其他同数索引项,且ai所在的原始索 引层不存在下一层索引层,或者, ai所在的原始索引层中存在除&1以外的其他同数索引项 ak,且&1为其所在的原始索引层中最旧的同数索引项,且ai所在的原始索引层不存在下一层 索引层,则删除所述原始索引层中的 ai;
[0046] 若&1所在的原始索引层中存在除&1以外的其他同数索引项,且&1不为其所在的原 始索引层中最旧的同数索引项,且 ai所在的原始索引层不存在下一层索引层,则保持&1,将 &1所在的原始索引层中最旧的同数索引项删除,
[0047] 其中,所述最旧的同数索引项为对应的数据版本相比于所述原始索引层中其他同 数索引项对应的数据版本最旧的同数索引项,i = l……m,m为所述多个索引项的个数,所述 下一层索引层所对应的版本次序与所在原始索引层所对应的版本次序相邻,且旧于&1所 在原始索引层所对应的版本次序。
[0048]第三方面,本发明实施例提供一种多版本数据索引的建立方法,包括:
[0049] 组织多层索引,并在索引项中设置表征数据版本的特征结构或特征信息,其中,每 层索引中相异的索引项对应的数据具有相同的版本次序,所述版本次序为数据版本的新旧 次序,所述数据版本的新旧次序预先根据数据的版本设定。
[0050] 结合第三方面,在第三方面第一种可能的实现方式中,所述的多版本数据索引建 立方法,以索引项中数据存储在存储介质中的位置作为表征数据版本的特征信息。
[0051] 结合第三方面,在第三方面第二种可能的实现方式中,以数据的版本信息作为表 征数据版本的特征信息。
[0052] 结合第三方面,在第三方面第三种可能的实现方式中,所述的多版本数据索引建 立方法,还包括:
[0053] 为每层索引设置内存存储优先级;
[0054] 定期根据内存的存储情况设置存储阈值;
[0055] 判断内存中是否存在内存存储优先级小于所述存储阈值的索引层;
[0056] 若内存中存在内存存储优先级小于所述存储阈值的索引层,将内存存储优先级小 于所述存储阈值的索引层存储于其他指定的固态存储介质,并从内存中删除;
[0057] 判断是否存在内存存储优先级大于或等于所述存储阈值的索引层;
[0058] 若存在内存存储优先级大于或等于所述存储阈值的索引层,判断内存存储优先级 大于或等于所述存储阈值的索引层是否存储于内存中;
[0059] 若内存存储优先级大于或等于所述存储阈值的索引层存储于内存之外,将内存存 储优先级大于或等于所述存储阈值的索引层存储于内存中。
[0060] 结合第三方面,在第三方面第四种可能的实现方式中,所述数据版本的新旧次序 预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的η个版本的新旧 次序依次按照从新到旧的顺序预先设定为1、2……η;
[0061] 所述组织多层索引,包括:
[0062] 组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
[0063] 组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。 [0064]结合第三方面第四种可能的实现方式,在第三方面第五种可能的实现方式中,所 述组织多层索引,包括:组织η层索引,其中,第η层索引中索引项对应的数据的版本次序为 η〇
[0065] 结合第三方面第四种可能的实现方式,在第三方面第六种可能的实现方式中,所 述组织多层索引,包括:
[0066] 组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1;
[0067] 组织第二层索引,所述第二层索引中索引项对应的数据的版本次序为2;
[0068]组织第三层索引,所述第三层索引中索引项对应的数据的版本次序为3至η,
[0069] 其中,η大于3。
[0070]结合第三方面第四种至第六种可能的实现方式其中任意一种,在第三方面第七种 可能的实现方式中,所述的多版本数据索引的建立方法,还包括:将所述第一层索引固定存 储于内存中。
[0071]结合第三方面,在第三方面第八种可能的实现方式中,所述数据版本的新旧次序 预先根据数据的版本设定,包括:以数据的当前版本为最新的版本,数据的η个版本的新旧 次序依次按照从新到旧的顺序预先设定为1、2……η,其中,η大于2;
[0072]所述组织多层索引,包括:
[0073] 组织第一层索引,所述第一层索引中索引项对应的数据的版本次序为1和2;
[0074] 组织其他层索引,其他层索引中索引项对应的数据的版本次序为一个或多个。
[0075] 第四方面,本发明实施例提供一种多版本数据索引的更新装置,包括:
[0076] 第一版本更新单元,用于根据被更新数据对应的多个版本数据的版本变化,分别 更新多层索引中所述多个版本数据对应的多个索引项中表征数据版本的特征结构或特征 信息;
[0077] 第一索引项移动单元,用于将所述多个索引项分别移动至与其表征数据版本的特 征结构或特征信息对应的索引层中;
[0078] 新索引项写入单元,用于将被更新数据对应的新索引项写入对应于最新版本数据 的索引层中,
[0079]其中,所述多层索引的每层索引中相异的索引项对应的数据具有相同的版本次 序,所述版本次序为数据版本的新旧次序,所述数据版本的新旧次序预先根据数据的版本 设定,且每层索引的索引项中设置有表征数据版本的特征结构或特征信息。
[0080] 结合第四方面第一种可能的实现方式,在第四方面第二种可能的实现方式中,若 一个索引层对应于一个版本次序,所述索引项移动单元,具体用于:
[0081] 对所述多个索引项中的每个索引项ai,判断多层索引中&1所在的原始索引层是否 存在下一层索引层;
[0082]若&1所在的原始索引层存在下一层索引层,将ai写入所述原始索引层的下一层索 弓丨层中,并删除所述原始索引层中的a1;
[0083] 若&1所在的原始索引层不存在下一层索引层,删除m,
[0084] 其中,i = l……m,m为所述多个索引项的个数,所述下一层索引层所对应的版本次 序与ai所在原始索引层所对应的版本次序相邻,且旧于 &1所在原始索引层所对应的版本次 序。
[0085] 结合第四方面,在第四方面第二种可能的实现方式中,以数据的当前版本为最新 的版本,数据的η个版本的新旧次序依次按照从新到旧的顺序预先设定为1、2……η,所述多 层索引,包括η层索引,其中,第η层索引中索引项对应的数据的版本次序为η,所述索引项移 动单元,在若&所在的原始索引层存在下一层索引层,将 ai写入所述原始索引层的下一层索 引层中时,具体用于:
[0086] 将&1写入tal+l层索引层中,其中,tal为所述原始索引层对应的版本次序,t al小于 n〇
[0087] 结合第四方面,在第四方面第三种可能的实现方式中,若多层索引中存在对应于 多个版本次序的索引层,所述索引项移动单元,具体用于:
[0088] 对所述多个索引项中的每个索引项ai,判断多层索引中&1所在的原始索引层中是 否存在除 &1以外的其他同数索引项,所述同数索引项属于所述多个索引项;
[0089] 若&1所在的原始索引层中存在除&1以外的其他同数索引项,判断ai是否为其所在 的原始索引层中最旧的同数索引项;
[0090] 判断多层索引中&1所在的原始索引层是否存在下一层索引层;
[0091] 若&1所在的原始索引层中不存在除&1以外的其他同
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1