一种索引记录的管理方法及装置制造方法

文档序号:6522180阅读:130来源:国知局
一种索引记录的管理方法及装置制造方法
【专利摘要】本发明实施例公开了一种索引记录的管理方法及装置,该方法包括在数据库表中插入新元组;创建与所述数据库表中插入的新元组对应的索引记录,其中,所述索引记录包括所述新元组的版本信息、用于表示所述新元组的版本信息对当前事务是否可见的状态信息、所述新元组中用于创建所述索引记录的键值以及指向所述新元组的指针,所述新元组的版本信息包括用于表示创建所述新元组的版本信息。实施本发明实施例可以在索引记录中添加元组的版本信息,能够根据索引记录中元组的版本信息解决读写冲突,提高了数据库的整体性能。
【专利说明】—种索引记录的管理方法及装置
【技术领域】
[0001]本发明涉及数据库【技术领域】,具体涉及一种索引记录的管理方法及装置。
【背景技术】
[0002]在数据库中,数据库表中的每行(即数据库表中的每条记录)就是一个元组。索引是对数据库表中一列或多列的值进行排序的一种结构,通过索引中的索引记录和DMUDataManipulation Language,数据操作语言)可以快速的访问数据库表中的特定元组从而大大提高了数据库的性能。
[0003]现有的大部分数据库只在数据库表中存储元组的新旧版本信息,当发生读写冲突时,写操作会产生一个新的版本信息,并将新的版本信息存储在更新后的元组中,而读操作就必须获取索引记录对应数据库表中的元组的版本信息才能够判断出元组是否符合该读操作的数据库快照的要求,这样大大降低了数据库的整体性能。

【发明内容】

[0004]本发明实施例公开了一种索引记录的管理方法及装置,用于解决当发生读写冲突时由于现有的索引记录中没有存储元组的版本信息而导致数据库整体性能降低的问题。
[0005]本发明实施例第一方面公开了一种索引记录的管理方法,所述方法包括:
[0006]在数据库表中插入新元组;
[0007]创建与所述数据库表中插入的新元组对应的索引记录,其中,所述索引记录包括所述新元组的版本信息、用于表示所述新元组的版本信息对当前事务是否可见的状态信息、所述新元组中用于创建所述索引记录的键值以及指向所述新元组的指针,所述新元组的版本信息包括用于表示创建所述新元组的版本信息。
[0008]在本发明实施例第一方面的第一种可能的实现方式中,所述方法还包括:
[0009]检测是否存在用于删除所述新元组的操作;
[0010]若检测到存在用于删除所述新元组的操作,则向所述新元组的版本信息中添加用于表示删除所述新元组的版本信息;
[0011]更新所述状态信息。
[0012]结合本发明实施例第一方面或本发明实施例第一方面的第一种可能的实现方式,在本发明实施例第一方面的第二种可能的实现方式中,所述方法还包括:
[0013]判断用于存储所述索引记录的索引页面的存储空间是否不足;
[0014]若确定出所述索引页面的存储空间不足,则执行用于清理所述索引页面的操作。
[0015]结合本发明实施例第一方面的第二种可能的实现方式,在本发明实施例第一方面的第三种可能的实现方式中,所述执行用于清理所述索引页面的操作包括:
[0016]根据所述索引页面中的索引记录的状态信息删除所述索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信息。
[0017]结合本发明实施例第一方面的第三种可能的实现方式,在本发明实施例第一方面的第四种可能的实现方式中,所述方法还包括:
[0018]删除所述索引页面中与所述数据库表中的垃圾元组对应的索引记录,其中,所述垃圾元组包括所述数据库表中被成功删除的元组。
[0019]本发明实施例第二方面公开了一种索引记录的管理装置,所述装置包括:
[0020]插入单元,用于在数据库表中插入新元组;
[0021]创建单元,用于创建与所述数据库表中插入的新元组对应的索引记录,其中,所述索引记录包括所述新元组的版本信息、用于表示所述新元组的版本信息对当前事务是否可见的状态信息、所述新元组中用于创建所述索引记录的键值以及指向所述新元组的指针,所述新元组的版本信息包括用于表示创建所述新元组的版本信息。
[0022]在本发明实施例第二方面的第一种可能的实现方式中,所述装置还包括:
[0023]检测单元,用于检测是否存在用于删除所述新元组的操作;
[0024]添加单元,用于若所述检测单元检测到存在用于删除所述新元组的操作,则向所述新元组的版本信息中添加用于表示删除所述新元组的版本信息;
[0025]更新单元,用于更新所述状态信息。
[0026]结合本发明实施例第二方面或本发明实施例第二方面的第一种可能的实现方式,在本发明实施例第二方面的第二种可能的实现方式中,所述装置还包括:
[0027]判断单元,用于判断用于存储所述索引记录的索引页面的存储空间是否不足;
[0028]清理单元,用于若所述判断单元确定出所述索引页面的存储空间不足,则执行用于清理所述索引页面的操作。
[0029]结合本发明实施例第二方面的第二种可能的实现方式,在本发明实施例第二方面的第三种可能的实现方式中,所述清理单元具体用于根据所述索引页面中的索引记录的状态信息删除所述索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信
肩、O
[0030]结合本发明实施例第二方面的第三种可能的实现方式,在本发明实施例第二方面的第四种可能的实现方式中,所述装置还包括:
[0031]删除单元,用于删除所述索引页面中与所述数据库表中的垃圾元组对应的索引记录,其中,所述垃圾元组包括所述数据库表中被成功删除的元组。
[0032]实施本发明实施例具有如下有益效果:当向数据库表中插入新元组时,创建与插入的新元组对应的索引记录,其中,索引记录包括新元组的版本信息、用于表示新元组的版本信息对当前事务是否可见的状态信息、新元组中用于创建索引记录的键值以及指向新元组的指针,新元组的版本信息包括用于表示创建新元组的版本信息。本发明实施例中,当发生读写冲突时,读操作就可以根据索引记录中元组的版本信息判断出与索引记录对应的元组是否符合该读操作的数据库快照的要求,提高了数据库的整体性能。
【专利附图】

【附图说明】
[0033]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0034]图1是本发明实施例公开的一种索引记录的管理方法的流程示意图;
[0035]图2是本发明实施例公开的另一种索引记录的管理方法的流程示意图;
[0036]图3是本发明实施例公开的一种索引记录的结构示意图;
[0037]图4是本发明实施例公开的另一种索引记录的结构示意图;
[0038]图5是本发明实施例公开的又一种索引记录的结构示意图;
[0039]图6是本发明实施例公开的又一种索引记录的结构示意图;
[0040]图7是本发明实施例公开的一种索引记录状态转换的结构示意图;
[0041]图8是本发明实施例公开的一种索引记录的管理装置的结构示意图;
[0042]图9是本发明实施例公开的另一种索引记录的管理装置的结构示意图;
[0043]图10是本发明实施例公开的又一种索引记录的管理装置的结构示意图。
【具体实施方式】
[0044]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0045]本发明提供了一种索引记录的管理方法及装置,可以在索引记录中添加元组的版本信息,能够根据索引记录中元组的版本信息解决读写冲突,提高了数据库的整体性能。以下分别进行详细说明。
[0046]请参阅图1,图1是本发明实施例公开的一种索引记录的管理方法的流程示意图。其中,图1所示的方法可以应用于多媒体数据库、移动数据库、空间数据库、信息检索系统、分布式信息检索系统以及专家决策系统等,本发明实施例不做限定。如图1所示,该方法可以包括以下步骤:
[0047]S101、在数据库表中插入新元组。
[0048]在数据库中,数据库是由表构成的,表是由页构成的,页是由元组构成的。数据库表中的每行记录就是一个元组,且对数据库中元组的操作可以有插入操作、查询操作、更新操作以及删除操作等。
[0049]S102、创建与数据库表中插入的新元组对应的索引记录。
[0050]索引与表一样,也属于段(segment)的一种,里面存放了用户的数据,且也需要占用磁盘空间。但是,索引里面的数据存放形式与数据库表里的数据存放形式不一样。索引是对数据库表中一列或多列的值进行排序的一种结构,且从物理上说,索引通常可以分为:分区和非分区索引、B树索引、位图索引以及翻转索引等,其中,最常用的为B树索引。
[0051]为数据库表建立索引的优点有:大大加快数据的检索速度;创建唯一性索引能保证数据库表中每一行数据的唯一性;能够加快表和表之间的连接;在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
[0052]以B树索引为例,B树索引包括根节点、分支节点以及叶子节点,其中,每一个叶子节点块存储在一个索引页面中,每一个叶子节点块中索引条目构成了索引页面中的索引记录,在数据库表中存在着与索引页面中的索引记录对应的元组,当数据库表中的元组发生变化时,索引页面中的索引记录也发生变化。当向数据库表中插入新元组时,在索引页面中就创建一个与新元组对应的索引记录,其中,索引记录中可以包括新元组的版本信息、用于表示新元组的版本信息对当前事务是否可见的状态信息、新元组中用于创建索引记录的键值以及指向新元组的指针(即新元组在数据库表中的物理地址),其中,新元组的版本信息可以包括用于表示创建新元组的版本信息,新元组的版本信息可以是一个时间点,也可以是与新元组相关的事务ID,本发明实施例不做限定。
[0053]举例来说,本发明实施例中创建的与新元组对应的索引记录可以是如图3中所示的状态1,图3是本发明实施例公开的一种索引记录的结构示意图。其中,CV表示创建新元组的版本信息,Information表示新元组的版本信息对当前事务是否可见的状态信息,Data表示新元组中用于创建索引记录的键值和指向新元组的指针,如图3所示,Information可以包括两个字段,第一个字段表示用于创建新元组的版本信息对当前事务是否可见的状态信息,第二个字段表示用于删除新元组的版本信息对当前事务是否可见的状态信息,插入的新元组只有用于创建新元组的版本信息,所以Information的第二个字段为null,如图3所示的状态I可以包括两种状态:状态11 (不可见状态)和状态12 (可见状态),状态11中Information的第一个字段为“O”表示用于创建新元组的版本信息对当前事务是不可见的,即用于创建新元组的事务还未被提交,状态12中Information的第二个字段为“I”表示用于创建新元组的版本信息对当前事务是可见的,即用于创建新元组的事务已被提交。
[0054]实施本发明实施例具有如下有益效果:为数据库表中插入的新元组创建索引记录,其中,索引记录中包括创建新元组的版本信息、用于表示新元组的版本信息对当前事务是否可见的状态信息,新元组中用于创建索引记录的键值以及指向新元组的指针,本发明实施例中,可以在索引记录中添加元组的版本信息,能够根据索引记录中元组的版本信息解决读写冲突,提高了数据库的整体性能。
[0055]请参阅图2,图2是本发明实施例公开的另一种索引记录的管理方法的流程示意图。其中,图2所示的方法可以应用于多媒体数据库、移动数据库、空间数据库、信息检索系统、分布式信息检索系统以及专家决策系统等,本发明实施例不做限定。如图2所示,该方法可以包括以下步骤:
[0056]S201、在数据库表中插入新元组。
[0057]在数据库中,数据库是由表构成的,表是由页构成的,页是由元组构成的。数据库表中的每行记录就是一个元组,且对数据库中元组的操作可以有插入操作、查询操作、更新操作以及删除操作等。
[0058]当向数据库表中插入新元组时,在索引页面中就创建一个与新元组对应的索引记录,其中,索引记录中可以包括新元组的版本信息、用于表示新元组的版本信息对当前事务是否可见的状态信息、新元组中用于创建索引记录的键值以及指向新元组的指针(即新元组在数据库表中的物理地址),其中,新元组的版本信息可以包括用于表示创建新元组的版本信息,新元组的版本信息可以是一个时间点,也可以是与新元组相关的事务ID,本发明实施例不做限定。
[0059]S202、创建与数据库表中插入的新元组对应的索引记录。
[0060]本发明实施例中,举例来说,创建的与新元组对应的索引记录可以是如图3所示的状态1,图3是本发明实施例公开的一种索引记录的结构示意图,如图3所示的状态I可以包括状态11 (不可见状态)和状态12 (可见状态),其中,CV表示创建新元组的版本信息,Information表示新元组的版本信息对当前事务是否可见的状态信息,Data表示新元组中用于创建索弓I记录的键值和指向新元组的指针。
[0061]作为一种可选的实施方式,如图2所示,该方法还可以包括:
[0062]S203、检测是否存在用于删除新元组的操作。
[0063]本发明实施例中,若检测到存在用于删除新元组的操作,则执行步骤S204。
[0064]S204、若检测到存在用于删除新元组的操作,则向新元组的版本信息中添加用于表示删除新元组的版本信息。
[0065]本发明实施例中,举例来说,当新元组的索引记录为状态I时且检测到存在用于删除新元组的操作,则向新元组的版本信息中添加用于表示删除新元组的版本信息,即索引记录的状态可以由如图3中的状态I变为如图4中的状态2,图4是本发明实施例公开的另一种索引记录的结构示意图,其中,CV表示创建新元组的版本信息,DV表示删除新元组的版本信息,Information表示新元组的版本信息对当前事务是否可见的状态信息,Information可以包括两个字段,第一个字段表示用于创建新元组的版本信息对当前事务是否可见的状态信息,第二个字段表示用于删除新元组的版本信息对当前事务是否可见的状态信息,Data表示新元组中用于创建索引记录的键值和指向新元组的指针,如图4所示,图4中的状态2可以包括以下三种状态:状态21,即状态21是由状态11变化而来,即用于创建新元组的事务和用于删除新元组的事务均为被提交;状态22,即状态22是由状态12变化而来,即用于创建新元组的事务已经提交且用于删除新元组的事务未被提交;状态23,即状态23是由状态12变化而来,即用于创建新元组的事务和用于删除新元组的事务均被提交,且索引页面中,处于状态23下的索引记录属于垃圾索引记录。
[0066]S205、更新状态信息。
[0067]本发明实施例中,根据用于创建新元组的事务或用于删除新元组的事务是否被提交更新索引记录中的版本信息,若Information的第一个字段为“1”,则可以表示用于创建新元组的版本信息对当前事务是可见的,即用于创建新元组的事务已被提交;若Information的第一个字段为“0”,则可以表示创建新元组的版本信息对当前事务是不可见的,即用于创建新元组的事务还未被提交;若Information的第二个字段为“0”,则可以表示删除新元组的版本信息对当前事务是不可见的,即删除新元组的事务还未被提交;若Information的第二个字段为“1”,即可以表示删除新元组的事务已被提交,该索引记录就可以视为一个垃圾索引记录。
[0068]本发明实施例中,当对数据库表中的元组执行更新操作时,会产生一个新的索引记录,且当与更新操作有关的事务被提交后,旧的索引记录也可以视为垃圾索引记录。
[0069]本发明实施例中,插入新元组时,索引记录中有用于表示创建新元组的版本信息,当删除新元组时,向索引记录中添加用于表示删除新元组的版本信息,即一个索引记录里面存储有新元组的新旧版本信息,这样在发生读写冲突时,可以直接根据索引记录中的版本信息判断与索引记录对应的元组是否符合读操作的数据库快照的要求,且当发生回滚操作时,可以直接根据索引记录中的版本信息将元组恢复到原来的版本。
[0070]作为一种可选的实施方式,如图2所示,该方法还可以包括:
[0071]S206、判断用于存储索引记录的索引页面的存储空间是否不足。
[0072]本发明实施例中,若向数据库表中不断的插入新元组,则在索引页面中也会不断的产生新的索引记录,若判断出用于存储索引记录的索引页面的存储空间不足,则执行步骤 S207。
[0073]S207、若确定出索引页面的存储空间不足,则执行用于清理索引页面的操作。
[0074]作为一种可选的实施方式,执行用于清理索引页面的操作可以具体为:
[0075]根据索引页面中的索引记录的状态信息删除索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信息。
[0076]举例来说,如图7所示,图7是本发明实施例公开的一种索引记录状态转换的结构示意图。如图7所示的索引记录状态转换可以包括以下几种转换方式:
[0077]若索引页面的某些索引记录处于状态12,则在执行步骤S207时,处于状态12下的索引记录可以删除状态12中用于表示创建元组的版本信息(其它保持不变)并转换为如图6所示的状态4,其中,图6是本发明实施例公开的又一种索引记录的结构示意图;
[0078]若索引页面的某些索引记录处于状态22,则在执行步骤S207时,处于状态22下的索引记录可以删除状态22中用于表示创建元组的版本信息(其它保持不变)并转换为如图5所示的状态3,其中,图5是本发明实施例公开的又一种索引记录的结构示意图。
[0079]本发明实施例中,若索引页面的某些索引记录处于状态21,则在执行步骤S207时,处于状态21下的索引记录保持不变;若索引页面的某些索引记录处于状态11,则在执行步骤S207时,处于状态11下的索引记录保持不变。
[0080]本发明实施例中,若在执行步骤S207时之后发生回滚操作,则如图5中的状态3可以转化为如图6中的状态4且将Information中的第二个字段置为null。
[0081]作为一种可选的实施方式,如图2所示,该方法还可以包括:
[0082]S208、删除索引页面中与数据库中的垃圾元组对应的索引记录。
[0083]本发明实施例中,删除索引页面中与数据库中的垃圾元组对应的索引记录可以是删除处于如图4中的状态23下的索引记录。
[0084]实施本发明实施例具有如下有益效果:可以在与数据库表中元组对应的索引记录中存储元组的新旧版本信息,能够根据索引记录中的版本信息解决读写冲突,且当发生回滚时,能够根据索引记录中的版本信息恢复到之前的状态,这样可以提高数据库的整体性能,此外,当索引页面的存储空间不足时,能够执行清理索引页面的操作,删除索引页面中不必要的信息,这样可以减少额外的处理线程且可以节省存储空间。
[0085]请参阅图8,图8是本发明实施例公开的一种索引记录的管理装置的结构示意图。如图8所示,该装置800可以包括插入单元801以及创建单元802,其中:
[0086]插入单元801用于在数据库表中插入新元组。
[0087]在数据库中,数据库是由表构成的,表是由页构成的,页是由元组构成的。数据库表中的每行记录就是一个元组,且对数据库中元组的操作可以有插入操作、查询操作、更新操作以及删除操作等。
[0088]创建单元802用于创建与数据库表中插入的新元组对应的索引记录。
[0089]举例来说,本发明实施例中创建的与新元组对应的索引记录可以是如图3中所示的状态1,图3是本发明实施例公开的一种索引记录的结构示意图。其中,CV表示创建新元组的版本信息,Information表示新元组的版本信息对当前事务是否可见的状态信息,Data表示新元组中用于创建索引记录的键值和指向新元组的指针,如图3所示,Information可以包括两个字段,第一个字段表示用于创建新元组的版本信息对当前事务是否可见的状态信息,第二个字段表示用于删除新元组的版本信息对当前事务是否可见的状态信息,插入的新元组只有用于创建新元组的版本信息,所以Information的第二个字段为null,如图3所示的状态I可以包括两种状态:状态11 (不可见状态)和状态12 (可见状态),状态11中Information的第一个字段为“O”表示用于创建新元组的版本信息对当前事务是不可见的,即用于创建新元组的事务还未被提交,状态12中Information的第二个字段为“I”表示用于创建新元组的版本信息对当前事务是可见的,即用于创建新元组的事务已被提交。
[0090]实施本发明实施例具有如下有益效果:为数据库表中插入的新元组创建索引记录,其中,索引记录中包括创建新元组的版本信息、用于表示新元组的版本信息对当前事务是否可见的状态信息,新元组中用于创建索引记录的键值以及指向新元组的指针,本发明实施例中,可以在索引记录中添加元组的版本信息,能够根据索引记录中元组的版本信息解决读写冲突,提高了数据库的整体性能。
[0091]请参阅图9,图9是本发明实施例公开的另一种索引记录的管理装置的结构示意图。如图9所示,该装置900可以包括插入单元901以及创建单元902,其中:
[0092]插入单元901用于在数据库表中插入新元组。
[0093]创建单元902用于创建与数据库表中插入的新元组对应的索引记录。
[0094]本发明实施例中,举例来说,创建的与新元组对应的索引记录可以是如图3所示的状态1,图3是本发明实施例公开的一种索引记录的结构示意图,如图3所示的状态I可以包括状态11 (不可见状态)和状态12 (可见状态),其中,CV表示创建新元组的版本信息,Information表示新元组的版本信息对当前事务是否可见的状态信息,Data表示新元组中用于创建索弓I记录的键值和指向新元组的指针。
[0095]作为一种可选的实施方式,如图9所示,该装置900还可以包括检测单元903、添加单元904以及更新单元905,其中:
[0096]检测单元903用于检测是否存在用于删除新元组的操作。
[0097]添加单元904用于若检测单元903检测到存在用于删除新元组的操作,向新元组的版本信息中添加用于表示删除新元组的版本信息。
[0098]本发明实施例中,举例来说,当新元组的索引记录为状态I时且检测到存在用于删除新元组的操作,则向新元组的版本信息中添加用于表示删除新元组的版本信息,即索引记录的状态可以由如图3中的状态I变为如图4中的状态2,图4是本发明实施例公开的另一种索引记录的结构示意图,其中,CV表示创建新元组的版本信息,DV表示删除新元组的版本信息,Information表示新元组的版本信息对当前事务是否可见的状态信息,Information可以包括两个字段,第一个字段表示用于创建新元组的版本信息对当前事务是否可见的状态信息,第二个字段表示用于删除新元组的版本信息对当前事务是否可见的状态信息,Data表示新元组中用于创建索引记录的键值和指向新元组的指针,如图4所示,图4中的状态2可以包括以下三种状态:状态21,即状态21是由状态11变化而来,即用于创建新元组的事务和用于删除新元组的事务均为被提交;状态22,即状态22是由状态12变化而来,即用于创建新元组的事务已经提交且用于删除新元组的事务未被提交;状态23,即状态23是由状态12变化而来,即用于创建新元组的事务和用于删除新元组的事务均被提交,且索引页面中,处于状态23下的索引记录属于垃圾索引记录。[0099]更新单元905用于更新状态信息。
[0100]本发明实施例中,根据用于创建新元组的事务或用于删除新元组的事务是否被提交更新索引记录中的版本信息,若Information的第一个字段为“1”,则可以表示用于创建新元组的版本信息对当前事务是可见的,即用于创建新元组的事务已被提交;若Information的第一个字段为“0”,则可以表示创建新元组的版本信息对当前事务是不可见的,即用于创建新元组的事务还未被提交;若Information的第二个字段为“0”,则可以表示删除新元组的版本信息对当前事务是不可见的,即删除新元组的事务还未被提交;若Information的第二个字段为“1”,即可以表示删除新元组的事务已被提交,该索引记录就可以视为一个垃圾索引记录。
[0101]本发明实施例中,当对数据库表中的元组执行更新操作时,会产生一个新的索引记录,且当与更新操作有关的事务被提交后,旧的索引记录也可以视为垃圾索引记录。
[0102]作为一种可选的实施方式,如图9所示,该装置900还可以包括判断单元906以及清理单元907,其中:
[0103]判断单元906用于判断用于存储索引记录的索引页面的存储空间是否不足。
[0104]清理单元907用于若判断单元906确定出索引页面的存储空间不足,执行用于清理索引页面的操作。
[0105]作为一种可选的实施方式,清理单元907执行用于清理索引页面的操作可以具体为:
[0106]根据索引页面中的索引记录的状态信息删除索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信息。
[0107]举例来说,如图7所示,图7是本发明实施例公开的一种索引记录状态转换的结构示意图。如图7所示的索引记录状态转换可以包括以下几种转换方式:
[0108]若索引页面的某些索引记录处于状态12,则在执行步骤S207时,处于状态12下的索引记录可以删除状态12中用于表示创建元组的版本信息(其它保持不变)并转换为如图6所示的状态4,其中,图6是本发明实施例公开的又一种索引记录的结构示意图;
[0109]若索引页面的某些索引记录处于状态22,则在执行步骤S207时,处于状态22下的索引记录可以删除状态22中用于表示创建元组的版本信息(其它保持不变)并转换为如图5所示的状态3,其中,图5是本发明实施例公开的又一种索引记录的结构示意图。
[0110]本发明实施例中,若索引页面的某些索引记录处于状态21,则在执行步骤S207时,处于状态21下的索引记录保持不变;若索引页面的某些索引记录处于状态11,则在执行步骤S207时,处于状态11下的索引记录保持不变。
[0111]本发明实施例中,若在执行步骤S207时之后发生回滚操作,则如图5中的状态3可以转化为如图6中的状态4且将Information中的第二个字段置为null。
[0112]作为一种可选的实施方式,如图9所示,该装置900还可以包括删除单元908,其中:
[0113]删除单元908用于删除索引页面中的与数据库中的垃圾元组对应的索引记录。
[0114]本发明实施例中,删除单元908删除索引页面中与数据库中的垃圾元组对应的索引记录可以是删除处于如图4中的状态23下的索引记录。
[0115]实施本发明实施例具有如下有益效果:可以在与数据库表中元组对应的索引记录中存储元组的新旧版本信息,能够根据索引记录中的版本信息解决读写冲突,且当发生回滚时,能够根据索引记录中的版本信息恢复到之前的状态,这样可以提高数据库的整体性能,此外,当索引页面的存储空间不足时,能够执行清理索引页面的操作,删除索引页面中不必要的信息,这样可以减少额外的处理线程且可以节省存储空间。
[0116]请参阅图10,图10是本发明实施例公开的又一种索引记录的管理装置的结构示意图。如图10所示,该装置1000包括:输入装置1001、输出装置1002、存储器1003和处理器1004,其中,存储器1003存储一组程序代码,且处理器1004用于调用存储器1003中存储的程序代码,用于执行以下操作:
[0117]在数据库表中插入新元组;
[0118]创建与数据库表中插入的新元组对应的索引记录,其中,索引记录包括新元组的版本信息、用于表示新元组的版本信息对当前事务是否可见的状态信息、新元组中用于创建索引记录的键值以及指向新元组的指针,新元组的版本信息包括用于表示创建新元组的版本信息。
[0119]在一个实施例中,处理器1004用于调用存储器1003中存储的程序代码,还用于执行以下操作:
[0120]检测是否存在用于删除新元组的操作;
[0121]若检测到存在用于删除新元组的操作,则向新元组的版本信息中添加用于表示删除新元组的版本信息;
[0122]更新状态信息。
[0123]在一个实施例中,处理器1004用于调用存储器1003中存储的程序代码,还用于执行以下操作:
[0124]判断用于存储索引记录的索引页面的存储空间是否不足;
[0125]若确定出索引页面的存储空间不足,则执行用于清理索引页面的操作。
[0126]在一个实施例中,处理器1004执行用于清理索引页面的操作可以包括:
[0127]根据索引页面中的索引记录的状态信息删除索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信息。
[0128]在一个实施例中,处理器1004用于调用存储器1003中存储的程序代码,还用于执行以下操作:
[0129]删除索引页面中与数据库表中的垃圾元组对应的索引记录,其中,垃圾元组包括数据库表中被成功删除的元组。
[0130]实施本发明实施例具有如下有益效果:可以在与数据库表中元组对应的索引记录中存储元组的新旧版本信息,能够根据索引记录中的版本信息解决读写冲突,且当发生回滚时,能够根据索引记录中的版本信息恢复到之前的状态,这样可以提高数据库的整体性能,此外,当索引页面的存储空间不足时,能够执行清理索引页面的操作,删除索引页面中不必要的信息,这样可以减少额外的处理线程且可以节省存储空间。
[0131]需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作、单元并不一定是本发明所必须的。[0132]本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
[0133]本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。
[0134]本发明实施例中的单元,可以通过通用集成电路,例如CPU (Central ProcessingUnit,中央处理器),或通过 ASIC (Application Specific Integrated Circuit,专用集成电路)来实现。
[0135]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory, ROM)或随机存储记忆体(Random AccessMemory, RAM)等。
[0136]以上对本发明实施例所提供的一种索引记录的管理的方法及装置进行了详细介绍,本文中应用了具体实例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种索引记录的管理方法,其特征在于,包括: 在数据库表中插入新元组; 创建与所述数据库表中插入的新元组对应的索引记录,其中,所述索引记录包括所述新元组的版本信息、用于表示所述新元组的版本信息对当前事务是否可见的状态信息、所述新元组中用于创建所述索引记录的键值以及指向所述新元组的指针,所述新元组的版本信息包括用于表示创建所述新元组的版本信息。
2.如权利要求1所述的方法,其特征在于,所述方法还包括: 检测是否存在用于删除所述新元组的操作; 若检测到存在用于删除所述新元组的操作,则向所述新元组的版本信息中添加用于表示删除所述新元组的版本信息; 更新所述状态信息。
3.如权利要求1或2所述的方法,其特征在于,所述方法还包括: 判断用于存储所述索引记录的索引页面的存储空间是否不足; 若确定出所述索引页面的存储空间不足,则执行用于清理所述索引页面的操作。
4.如权利要求3所述的 方法,其特征在于,所述执行用于清理所述索引页面的操作包括: 根据所述索引页面中的索引记录的状态信息删除所述索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信息。
5.如权利要求4所述的方法,其特征在于,所述方法还包括: 删除所述索引页面中与所述数据库表中的垃圾元组对应的索引记录,其中,所述垃圾元组包括所述数据库表中被成功删除的元组。
6.一种索引记录的管理装置,其特征在于,包括: 插入单元,用于在数据库表中插入新元组; 创建单元,用于创建与所述数据库表中插入的新元组对应的索引记录,其中,所述索引记录包括所述新元组的版本信息、用于表示所述新元组的版本信息对当前事务是否可见的状态信息、所述新元组中用于创建所述索引记录的键值以及指向所述新元组的指针,所述新元组的版本信息包括用于表示创建所述新元组的版本信息。
7.如权利要求6所述的装置,其特征在于,所述装置还包括: 检测单元,用于检测是否存在用于删除所述新元组的操作; 添加单元,用于若所述检测单元检测到存在用于删除所述新元组的操作,则向所述新元组的版本信息中添加用于表示删除所述新元组的版本信息; 更新单元,用于更新所述状态信息。
8.如权利要求6或7所述的装置,其特征在于,所述装置还包括: 判断单元,用于判断用于存储所述索引记录的索引页面的存储空间是否不足; 清理单元,用于若所述判断单元确定出所述索引页面的存储空间不足,则执行用于清理所述索引页面的操作。
9.如权利要求8所述的装置,其特征在于,所述清理单元具体用于根据所述索引页面中的索引记录的状态信息删除所述索引页面中的索引记录中对当前事务可见的用于表示创建元组的版本信息。
10.如权利要求9所述的装置,其特征在于,所述装置还包括: 删除单元,用于删除所述索引页面中与所述数据库表中的垃圾元组对应的索引记录,其中,所述垃圾元组包括所述数据库表中被成功删除的元组。
【文档编号】G06F17/30GK103714121SQ201310645551
【公开日】2014年4月9日 申请日期:2013年12月3日 优先权日:2013年12月3日
【发明者】李海丰 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1