关系数据库中时间唯一索引中的间隙检测的方法和系统的制作方法

文档序号:6508148阅读:318来源:国知局
关系数据库中时间唯一索引中的间隙检测的方法和系统的制作方法
【专利摘要】本发明提供了实现和使用用于关系数据库中时间唯一索引中的间隙检测的技术的方法和装置,包括计算机程序产品。在关系数据库中提供时间唯一索引。该索引包括第一组关键词,每个关键词包括一个或多个非时间关键词部分以及两个时间关键词部分。响应于接收到针对改变的行的插入、更新或删除语句,识别与所改变的行具有相同的非时间关键词部分的行。将所识别的行的时间关键词部分与所改变的行的时间关键词部分进行比较,以确定:所改变的行是否与时间更早的行和时间更晚的行直接相邻,所改变的行与时间更早的行之间是否检测到间隙,或者所改变的行与时间更晚的行之间是否检测到间隙。
【专利说明】关系数据库中时间唯一索引中的间隙检测的方法和系统
【技术领域】
[0001]本发明涉及关系数据库,并且更具体地,涉及关系数据库中时间唯一索引中的间隙检测。
【背景技术】
[0002]关系数据库可以一般地描述为数据项的集合,其被组织为可以容易地从其访问数据的一组正式描述的表。关系数据库中使用的软件通常称为关系数据库管理系统(RDBMS)。RDBMS的一个示例是DB2通用数据库(DB2 UDB ),其可以从纽约Armonk的国际商业机器公司获得。RDBMS中通常使用的一种类型的表是应用维持的时序表(Application_MaintainedTemporal Tables)。时序表包含已知对给定时间段有效的数据。例如,对客户贷款的利率每月或每年具有特定值,但该利率在贷款的寿命期限中可能波动。数据库服务器可以在应用维持的时序表之上处理两种类型的约束(constraint):时间唯一性(TemporalUniqueness)和间隙消除(Gap Elimination)。
[0003]时间唯一性约束(在DB2 UDB系统中也称为“无重叠(WITHOUT OVERLAPS)”约束)确保应用维持的时序表的每行描述离散的时间段,即,给定客户的贷款利率仅具有针对贷款寿命中的任何给定时间点的一个值。
[0004]间隙消除约束(本文也称为“无间隙(WITHOUT GAPS)”确保在用户数据的持续期间上不存在值的间隙,即,从贷款开始直到贷款结束,不存在未记录利率的时间点。
[0005]在某些RDBMS (诸如DB2 UDB)中,用户可以创建他们自己的间隙消除触发器或结构化查询语言(SQL)查询,以检测间隙。然而,这些SQL查询比时间唯一性复杂得多,因为间隙消除查询需要使用联机分析处理(0LAP)或其它分析功能,以在索引中确定“下一”和“前一”行的值,即:
[0006]SELECT*FR0M
[0007](SELECT ST0CK_ID, MAX(END_DATE)OVER(ORDER BY BEGIN_DATE)GAP_START,
[0008]LEAD(BEGIN_DATE)OVER(ORDER BY BEGIN_DATE)GAP_END FROM Tl)
[0009]WHERE GAP_START<GAP_END
[0010]此外,使用基于SQL的间隙消除方案的用户可能得到“错误的肯定(falsepositives)”,因为在更新/删除/插入(UDI)操作之后以及上述SQL语句被读取之前,索引未被锁定,并且这需要用户调整查询以匹配他们想要监视间隙的索引。
[0011]另一可选技术是在UDI操作后执行表的索引扫描,查找与被修改的非时间关键词部分匹配的所有关键词(key),并且在扫描期间确保当前行的结束时间等于下一行的开始时间。然而,这引入了锁定与并发的问题,因为扫描必须在数据上的索引锁定和页面锁定已被释放之后发生。

【发明内容】

[0012]根据本发明的各种实施例,提供了用于关系数据库中时间唯一索引中的间隙检测的方法和装置,包括计算机程序产品。在关系数据库中提供了时间为一索引。时间唯一索引包括第一组关键词。第一组关键词中的每个关键词包括一个或多个非时间关键词部分以及两个时间关键词部分,时间关键词部分指示时间开始值和时间结束值。响应于接收到与关系数据库中的改变的行有关的插入语句、更新语句和删除语句中的一个,在时间唯一索引中识别与所改变的行具有相同的非时间关键词部分的行。将所识别的行的时间关键词部分与所改变的行的时间关键词部分进行比较,以确定:所改变的行是否与时间更早的行和时间更晚的行直接相邻,所改变的行与时间更早的行之间是否检测到间隙,或者所改变的行与时间更晚的行之间是否检测到间隙。
[0013]下面在附图和描述中说明本发明的一个或多个实施例的细节。从描述和附图以及权利要求,本发明的其它特征和优点将是明显的。
【专利附图】

【附图说明】
[0014]图1-图8示出了根据本发明的各种实施例的、索引和间隙列表如何受各种UDI操作影响的示例。
[0015]各个附图中同样的参考标记指示同样的元素。
【具体实施方式】
[0016]总述
[0017]这里描述的各个实施例涉及例如可以由RDBMS索引管理器(诸如DB2索引管理器)使用的技术,以在时间索引上的UDI操作期间维持间隙的列表。作为使用这些技术的结果,可以提高RDBMS的性能,对于时间索引上的时间UDI操作需要更少的应用开发时间,并且为用户获得增加的价值。
[0018]根据各个实施例,如果以下信息是已知的:所改变的行的开始时间(已知)、所改变的行的结束时间(已知)、前一行的结束时间(如果存在)、以及下一行的开始时间(如果存在),则可以在索引插入、删除或更新(更新就是删除后立即插入)时检查间隙消除。
[0019]这里所使用的表述“前一行”和“下一行”是指匹配索引中的所有其它非时间关键词部分的行。前一值和下一值可被用于确定所改变的行是否与该两行在任一侧上直接时间相邻,或者是否存在空白(empty)空间(现有间隙)。
[0020]插入(INSERT)语句可以创建间隙(如果要被插入的行不与前一行或下一行直接相邻)或者去除间隙(如果要被插入的行与前一行或下一行都直接相邻,即,在更新(UPDATE)语句中)。
[0021]删除(DELETE)语句可以创建间隙(如果要被删除的行与前一行和下一行都直接相邻)或去除间隙(如果要被删除的行不与前一行或下一行直接相邻,即,在更新语句中)。
[0022]有时,插入和删除语句也可以延伸或分离或截断现有间隙。下面将详细描述的各种技术使用间隙检测算法,其追踪最小数目的已知间隙。如下面将描述的,针对常用情形优化算法,诸如单个数据的常规插入或删除,或者完全清除表(即“DELETE FROM T1 (从T1删除),,)。
[0023]一些更新语句可能产生将由更新的结束消除(resolve)的临时间隙,即,在给定表中的数据的情况下,以下更新语句"UPDATE T1SET BUS_START=BUS_START+1M0NTH, BUS_END=BUS_END+1M0NTH〃可能在许多行中产生临时间隙,但该更新的最终结果总是没有间隙的表。这是因为无间隙索引上的每个事务必须在索引中无间隙的情况下完成,否则事务回退(ro 11 back)。如果事务以没有间隙的表开始,则这种索弓I上的任何数据库操作的最终结果总是没有间隙的表。
[0024]一旦间隙已知,则可以将间隙添加到存储在可由可以触及所讨论的表的所有代理(agent)访问的存储器的共享区域中的链接列表。链接列表的元素将包括表id、对象id、索引id、非时间关键词部分(或其散列值,以节省空间)、以及间隙的开始和结束时间。如果UDI操作将去除间隙,可以通过下面的算法搜索间隙列表,以找到现有间隙。
[0025]一旦操作完成并且已经通过语句改变所有行,则发现操作是否导致间隙与检查间隙列表是否具有任何成员一样简单。可以在针对迟延的(deferred)唯一'丨生索引的唯一'I"生违反检查时完成此检查。如果操作导致间隙,则事务将被回退。
[0026]所属【技术领域】的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0027]可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0028]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0029]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0030]可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言一诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0031]下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些计算机程序指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。
[0032]也可以把这些计算机程序指令存储在计算机可读介质中,这些指令使得计算机、其它可编程数据处理装置、或其他设备以特定方式工作,从而,存储在计算机可读介质中的指令就产生出包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的指令的制造品(article of manufacture)0
[0033]也可以把这些计算机程序指令加载到计算机、其它可编程数据处理装置或其它设备上,以使得可以在该计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的处理,从而,在该计算机或其它可编程装置上执行的指令提供用于实现流程图和/或框图中的一个或多个方框中规定的功能/动作的处理。
[0034]一些说明性示例
[0035]现在将利用可以在RDBMS中执行的不同类型的操作的示例说明本发明的各种实施例。为了这些示例的目的,假设存在具有关键词ΚΟ、ΚΙ、K2……Kn的索引。每个关键词
Κ由非时间关键词部分KpO、Kpl......Κρη和用于时间开始和结束值的两个时间关键词部分
ΚρΒ和ΚρΕ组成。时间开始关键词部分ΚρΒ必须小于ΚρΕ,其中ΚρΒ是包含的(inclusive)而ΚρΕ是单独的(exclusive)·。这些限制是时间关键词部分定义所固有的。对于允许ΚρΒ是单独的或允许ΚρΕ是包含的的时间实施方式,将需要略微修改下述技术。
[0036]可以三个不同方式定义这种表中的唯一性:
[0037]非时间唯一性,其规定对于所有关键词Κ,Κ的所有关键词部分都是不同的。
[0038]没有重叠的时间唯一性,其附加地规定对于所有不同对的关键词Κ1和Κ2,满足以下条件:
[0039]ο 如果 KlpB〈=K2pB,则 Κρ1Ε〈Κ2ρΒ.[0040]ο 如果 Κ1ρΕ>=Κ2ρΕ,则 Κ1ρΒ>=Κ2ρΕ.[0041]没有重叠或间隙的时间唯一性,其附加地规定对于所有外部相同的关键词(下面定义),如果存在与Κ外部相同但时间上早于Κ的前一关键词PrevK,则PrevK的ΚρΕ等于Κ的ΚρΒ,并且如果存在与Κ外部相同但时间上晚于Κ的下一关键词NextK,则NextK的ΚρΒ等于Κ的ΚρΕ。如果索引中的所有关键词Κ满足此要求,则索引被称为是没有间隙的时间唯
ο
[0042]让我们称其中Kp0、Kpl……Κρη等价的任意两个关键词为外部相同的关键词,因为数据的当前版本将仅在满足时间唯一性约束的表中包含一个这样的关键词。例如,假设存在具有两个关键词(Joe, ‘123’,01/01/12,02/01/12)和(Joe, ‘ 123’,02/01/12,03/01/12)的时间索弓丨,则它们是外部相同的。换言之,对于查询该数据库的用户,仅存在一个值(Joe, ‘ 123’),其具有两个有效时段,一个来自于1月至2月,一个来自于2月至3月。关键词的非时间关键词部分都是相同的,但时间(开始/结束)关键词部分是不同的。从数据库的角度,索引关键词本身当然是完全不同的,但从时间应用的用户的角度,它们是相同的。
[0043]无间隙检查
[0044]如果对于给定关键词K,索引不包含PrevK或NextK,则在该时间方向(更早或更晚)不需要间隙检查。
[0045]如果索引包含索引中没有其它与其外部相同的关键词的关键词K,则该关键词K被称为在任一侧上没有间隙。
[0046]完全没有关键词的索引也被称为满足无间隙约束和无时间重叠约束。
[0047]在某些实施例中,仅在DML (数据操纵语言)语句的执行的结束时检查无间隙限制。假设在选择(SELECT)操作期间,在索引上不需要存在阻止读取的锁,并且对于UDI操作,在UDI操作的期间,数据库仅锁定修改的关键词的外部相同的关键词。
[0048]对于无间隙索引,索引必须在连续的状态中开始任何事务,S卩,所有关键词满足没有间隙和没有重叠的时间唯一性要求。下面是在索引插入、更新和删除语句过程期间可能创建间隙的几个情况。
[0049]添加关键词
[0050]此操作作为SQL语句的部分将关键词添加到索引。如果新关键词K具有外部相同的PrevK,其中K->KpB不等于PrevK->KpE,或者如果新关键词K具有外部相同的NextK,其中K->KpE不等于NextK->KpB,则此操作可能导致在索引中出现间隙。
[0051]插入(INSERT)语句可以将一个或多个关键词添加到索引。例如,如果超过一个关键词正被添加到索引(例如作为来自SUBSELECT SQL语句的INSERT (插入)的部分),则正被插入的关键词的顺序未被限定。如上所述,即使插入语句的最终结果是没有间隙的索引,插入语句也可以引入临时间隙。为此原因,在整个插入操作完成之前,“添加关键词”操作不能抛出错误。
[0052]通过撤销(undo)被回退的事务的所有操作而执行数据库中的回退(ROLLBACK)。回退操作的一个示例是撤销删除操作,其等价于将关键词添加到索引中。假设索引在删除开始之前在连续的无间隙状态中,在删除的撤销期间,应该在索引中不造成间隙。
[0053]将第一个关键词添加到空白索引中,或者添加针对给定一组的非时间关键词部分的第一个外部相同的关键词将永远不会造成间隙。可以检测这两种情形,或者可以在此插入语句期间禁用间隙检测。
[0054]删除关键词
[0055]此操作作为SQL语句的部分从索引去除关键词。如果所删除的关键词K具有外部相同的PrevK,其中K->KpB等于PrevK_>KpE,并且所删除的关键词具有外部相同的Nextk,其中K->KpE等于NextK-KpB,则此操作可以在索引中导致间隙的出现。如果所删除的关键词k紧挨在该索引中之前或之后没有外部相同的关键词,则不能造成间隙。注意,用于关键词删除的间隙检测算法与用于关键词插入的间隙检测算法相反。
[0056]删除语句可以从索引删除一个或多个关键词。如果正从索引删除超过一个关键词,则正被删除的关键词的顺序未被限定,并且,即使删除语句的最终结果是没有间隙的索弓丨,删除语句也可以引入临时间隙。为此原因,在整个删除操作完成之前,删除关键词的操作不能抛出错误。
[0057]删除索引的最后一个关键词,或者删除针对给定一组的非时间关键词部分的最后一个外部相同的关键词将永远不会造成间隙。可以检测这两种情况,或者在此删除语句期间可以禁用间隙检测。
[0058]更新操作
[0059]如在关键词删除之后插入不同的关键词一样,处理更新语句。因此,上述用于添加或删除关键词的逻辑在更新操作内发生,并且如果抛出针对间隙的错误,则仅在语句结束时将在关键词的添加或删除期间检测到的任何间隙记录在间隙列表中。
_0] 维持操作的临时间隙的列表
[0061]通过间隙的时间范围的开始和结束描述间隙。开始和结束值不能为空(NULL),并且不能是负无限大或正无限大。仅可以在未被当前UDI语句删除的两个关键词值之间出现间隙。在一些实施例中,已知间隙的列表被维持为可查询树(诸如二叉树或B树),并且每个间隙列表一次仅可由一个数据库工作单元读取和写入,并且一次将包含用于一个索引的间隙的列表。这避免了多个工作单元干扰彼此的间隙检查。
[0062]在添加或删除关键词的操作期间找到间隙的任何时间,可以将间隙条目添加到该间隙列表。间隙条目包括非时间关键词部分、间隙开始时间和间隙结束时间。间隙开始和结束时间由下一个或前一个外部相同的关键词的开始或结束时间以及新添加的或删除的关键词的开始或结束时间确定。
[0063]以此方式,间隙列表将用作索引的镜子(miiror)。索引中存在的任何值将不在间隙列表中,并且间隙列表中存在的任何间隙将不出现在索引中。因此,为了最小化这些间隙列表的尺寸,在添加和删除关键词时找到的间隙将与已知间隙组合,或者去除已知间隙,这取决于特定规则。
[0064]为了进一步说明这一点,请考虑以下情况A-E,下面将参照【专利附图】
附图
【附图说明】它们。为了下面情况A-E中的示例的目的,假设存在连续(consistent)的索引以及特定范围的时间关键词值,其具有时间开始和结束值TO、Tl、T2、T3、T4和T5。时间范围Τ1→T2被从索引中删除,并被添加到间隙列表中,如图1所示。
[0065]情况A:新添加的间隙与现有间隙相邻
[0066]如果新添加的间隙与列表中的现有间隙相邻(即,新间隙的ΚρΕ等于现有间隙的ΚρΒ,和/或新间隙的ΚρΒ等于现有间隙的ΚρΕ),则一侧或两侧上的间隙将受此间隙的添加的影响。
[0067]情况Α1:其一个示例是是否从索引删除时间范围Τ0->Τ1。间隙列表包含Τ1->Τ2,此新间隙与现有间隙相邻且早于现有间隙,但本身在列表中没有更早的间隙。也没有晚于Τ1的间隙,因此,值Τ0→T1的删除将使得必须从间隙列表中去除间隙Τ1→T2,使间隙列表为空。索引此时在其中没有间隙,因为最早的值为Τ2。因为间隙不能具有无穷大的开始或结束时间,所以如果最早或最后的值被删除,则这具有去除了相邻的已知间隙的效果。图2中示出了更新的索引和间隙列表。
[0068]情况Α2:现在考虑从索引删除时间范围Τ2→T3的情况。接着,将现有间隙Τ1_>Τ2扩展变为从Τ1→T3的间隙。间隙列表仍然仅具有一个已知间隙,尽管已经从索引中删除了两个关键词值。以此方式,最小数目的间隙被记录在间隙列表中,并且其将永远不大于索引本身中的关键词的数目的一半。图3示出了更新的索引和间隙列表。
[0069]情况A3:考虎间隙列表包含两个间隙Τ1->Τ2和Τ3_>Τ4的情况,如图4Α中所示。引入新间隙Τ2-Χ3,其与间隙列表中的两个间隙都相邻。前一间隙的ΚρΕ现在变为后一间隙的ΚρΕ,并且后一间隙被从列表中去除,使得间隙列表中留下单个间隙Τ1-Χ4,如图4Β中所示。
[0070]情况Β:新添加的间隙没有相邻间隙
[0071]如果新添加的间隙在列表中没有相邻间隙,但在列表中存在更早或更晚的外部相同的关键词值,这是一个新间隙。例如,如果从图1中所示的原始索引和间隙列表,要从索引中删除Τ3-Τ4,则此间隙将被添加到间隙列表,不会与现有间隙Τ1-Χ2组合或修改现有间隙Τ1-Χ2,如图5中所示。
[0072]情况C:从间隙列表中删除间隙
[0073]如果从间隙列表中删除间隙(即,当索引关键词在被删除之后被在相同工作单元内添加回到索引),并且该间隙精确地匹配已知间隙,则从间隙列表去除该间隙。例如,如果现有间隙Τ1-Χ2被从如图1所示的间隙列表中删除,则所产生的索引和间隙列表将如图6中的索引和间隙列表。 [0074]情况D:新删除的间隙被完全包含在现有间隙内
[0075]如果新删除的间隙被完全包含在现有间隙内,则间隙必须被分离为两个,前半个间隙具有与所删除的间隙的ΚρΒ相等的ΚρΕ,后半个间隙具有与所删除的间隙的ΚρΕ相等的ΚρΒ。例如,如果间隙列表包含Τ1-Χ4,如图7Α中所示,并且间隙Τ2-Χ3被去除,则间隙列表将包含Τ1-Χ2和Τ3-Χ4,如图7Β中所示。
[0076]情况Ε:新删除的间隙部分包含在现有间隙内
[0077]如果新删除的间隙部分包含在现有间隙内,则现有间隙的开始或结束时间必须被修改,效果上缩短了已知间隙。例如,如果间隙列表包含Τ1-Χ4,如图8Α中所示,并且间隙Τ3-Χ4被从列表去除,则现有间隙将变为Τ1-Χ3,如图8Β中所示。
[0078]在操作结束时,通过观察间隙列表并看是否还存在任何元素来检查间隙的存在将很简单。造成间隙的索引操作将被回退,并且在此回退操作期间,可以挂起所有间隙检查,因为回退保证索引回到其原始的连续状态。
[0079]附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0080]这里使用的术语仅用于描述特定实施例的目的,而不意在限制本发明。如这里所使用的,单数形式也意在包含复数形式,除非上下文清楚表明不是这样。还将理解,词语“包括”和/或“包含”当在该说明书中使用时表示所陈述的特征、数字、步骤、操作、元素和/或组件的存在,但不排除一个或多个其它特征、数字、步骤、操作、元素、组件和/或它们的组合的存在或添加。[0081]权利要求中的所有装置或步骤加功能元素的相应结构、材料、动作和等同体意在包括用于与具体主张的其它权利要求元素组合地执行功能的任何结构、材料或动作。已经为了说明和描述的目的呈现了本发明的描述,但其不意在为是穷举的或者将本发明限制到所公开的形式。对于本领域的技术人员而言,在不偏离本发明的范围和精神的情况下,许多修改和改变是明显的。例如,可以如下建模的间隙列表处理这里所描述的各种实施例:B树、或散列表、或链接列表、或任何Java库(HashMap、TreeMap等)、或XML文件等,如本领域的技术人员所熟悉的。只要遵循所述规则,算法不强制要求间隙列表(或索引或数据库)的实施方式。为了最佳地说明本发明的原理和实际应用,以及为了使本领域的技术人员能够针对具有适合于所想到的特定用途的各种修改的各种实施例而理解本发明,选择和说明了实施例。
【权利要求】
1.一种用于关系数据库中时间唯一索引中的间隙检测的方法,包括:在关系数据库中提供时间唯一索引,其中所述时间唯一索引包括第一组关键词,其中所述第一组关键词中的每个关键词包括一个或多个非时间关键词部分和指示时间开始值和时间结束值的两个时间关键词部分;以及响应于接收到与所述关系数据库中的改变的行有关的插入语句、更新语句和删除语句之一,识别所述时间唯一索引中与所改变的行具有相同非时间关键词部分的行,以及将所识别的行的时间关键词部分与所改变的行的时间关键词部分进行比较,以确定:所改变的行是否与时间上更早的行和时间上更晚的行都直接相邻,是否在所改变的行和时间上更早的行之间检测到间隙,或者是否在所改变的行与时间上更晚的行之间检测到间隙。
2.如权利要求1所述的方法,还包括:响应于检测到间隙,将关于所述间隙的数据存储在间隙列表中。
3.如权利要求2所述的方法,还包括:将所述间隙列表存储在具有访问所述关系数据库中的所述时间唯一索引的权限的代理能够访问的存储器的共享区域中。
4.如权利要求3所述的方法,其中所述间隙列表被作为可查询树而保持在所述存储器中。
5.如权利要求2所述的方法`,其中所述间隙列表是链接列表,所述链接列表针对每个被检测的间隙包含以下元素中的一个或多个:表识别符、对象识别符、索引识别符、非时间关键词部分、以及所述间隙的开始和结束时间。
6.如权利要求5所述的方法,还包括:对所述元素中的至少一些进行散列化,以节省所述存储器中的空间。
7.如权利要求2所述的方法,还包括:响应于接收到与所述关系数据库中的改变的行有关的插入语句、更新语句和删除语句之一,搜索所述间隙列表,以确定所述语句执行的操作是否造成了间隙。
8.如权利要求7所述的方法,其中在针对延迟的唯一性索引的唯一性违反检查时,执行所述间隙列表的搜索;以及响应于确定所述操作造成了间隙,回退造成所述间隙的所述操作。
9.如权利要求2所述的方法,其中所述间隙列表一次仅能够由一个数据库工作单元读取和写入;以及所述间隙列表一次仅包含用于一个时间唯一索引的间隙。
10.如权利要求2所述的方法,还包括:当新识别的间隙被添加到所述间隙列表时,根据一组预定规则,通过组合一个或多个间隙或通过去除已知间隙来减小所述间隙列表的尺寸。
11.一种用于关系数据库中时间唯一索引中的间隙检测的系统,包括用于实现权利要求1-10的任意方法的任意步骤的装置。
12.一种用于关系数据库中时间唯一索引中的间隙检测的系统,包括:数据储存器,可操作来存储关系数据库,所述关系数据库包括时间唯一索引,所述时间唯一索引具有第一组关键词,其中所述第一组关键词中的每个关键词包括一个或多个非时间关键词部分和指示时间开始值和时间结束值的两个时间关键词部分;以及服务器计算机,可操作来控制所述关系数据库并可操作来执行用于处理对来自所述关系数据库中的数据的用户查询的方法动作,所述方法动作包括:响应于接收到与所述关系数据库中的改变的行有关的插入语句、更新语句和删除语句之一,通过所述服务器计算机识别所述时间唯一索引中与所改变的行具有相同非时间关键词部分的行,以及通过所述服务器计算机将所识别的行的时间关键词部分与所改变的行的时间关键词部分进行比较,以确定:所改变的行是否与时间上更早的行和时间上更晚的行都直接相邻,是否在所改变的行和时间上更早的行之间检测到间隙,或者是否在所改变的行与时间上更晚的行之间检测到 间隙。
【文档编号】G06F17/30GK103631843SQ201310363334
【公开日】2014年3月12日 申请日期:2013年8月20日 优先权日:2012年8月20日
【发明者】R.P.斯帕尔滕 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1