關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了實(shí)現(xiàn)和使用用于關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的技術(shù)的方法和裝置,包括計(jì)算機(jī)程序產(chǎn)品。在關(guān)系數(shù)據(jù)庫(kù)中提供時(shí)間唯一索引。該索引包括第一組關(guān)鍵詞,每個(gè)關(guān)鍵詞包括一個(gè)或多個(gè)非時(shí)間關(guān)鍵詞部分以及兩個(gè)時(shí)間關(guān)鍵詞部分。響應(yīng)于接收到針對(duì)改變的行的插入、更新或刪除語(yǔ)句,識(shí)別與所改變的行具有相同的非時(shí)間關(guān)鍵詞部分的行。將所識(shí)別的行的時(shí)間關(guān)鍵詞部分與所改變的行的時(shí)間關(guān)鍵詞部分進(jìn)行比較,以確定:所改變的行是否與時(shí)間更早的行和時(shí)間更晚的行直接相鄰,所改變的行與時(shí)間更早的行之間是否檢測(cè)到間隙,或者所改變的行與時(shí)間更晚的行之間是否檢測(cè)到間隙。
【專利說(shuō)明】關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及關(guān)系數(shù)據(jù)庫(kù),并且更具體地,涉及關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)。
【背景技術(shù)】
[0002]關(guān)系數(shù)據(jù)庫(kù)可以一般地描述為數(shù)據(jù)項(xiàng)的集合,其被組織為可以容易地從其訪問(wèn)數(shù)據(jù)的一組正式描述的表。關(guān)系數(shù)據(jù)庫(kù)中使用的軟件通常稱為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。RDBMS的一個(gè)示例是DB2通用數(shù)據(jù)庫(kù)(DB2 UDB ),其可以從紐約Armonk的國(guó)際商業(yè)機(jī)器公司獲得。RDBMS中通常使用的一種類型的表是應(yīng)用維持的時(shí)序表(Application_MaintainedTemporal Tables)。時(shí)序表包含已知對(duì)給定時(shí)間段有效的數(shù)據(jù)。例如,對(duì)客戶貸款的利率每月或每年具有特定值,但該利率在貸款的壽命期限中可能波動(dòng)。數(shù)據(jù)庫(kù)服務(wù)器可以在應(yīng)用維持的時(shí)序表之上處理兩種類型的約束(constraint):時(shí)間唯一性(TemporalUniqueness)和間隙消除(Gap Elimination)。
[0003]時(shí)間唯一性約束(在DB2 UDB系統(tǒng)中也稱為“無(wú)重疊(WITHOUT OVERLAPS)”約束)確保應(yīng)用維持的時(shí)序表的每行描述離散的時(shí)間段,即,給定客戶的貸款利率僅具有針對(duì)貸款壽命中的任何給定時(shí)間點(diǎn)的一個(gè)值。
[0004]間隙消除約束(本文也稱為“無(wú)間隙(WITHOUT GAPS)”確保在用戶數(shù)據(jù)的持續(xù)期間上不存在值的間隙,即,從貸款開(kāi)始直到貸款結(jié)束,不存在未記錄利率的時(shí)間點(diǎn)。
[0005]在某些RDBMS (諸如DB2 UDB)中,用戶可以創(chuàng)建他們自己的間隙消除觸發(fā)器或結(jié)構(gòu)化查詢語(yǔ)言(SQL)查詢,以檢測(cè)間隙。然而,這些SQL查詢比時(shí)間唯一性復(fù)雜得多,因?yàn)殚g隙消除查詢需要使用聯(lián)機(jī)分析處理(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的間隙消除方案的用戶可能得到“錯(cuò)誤的肯定(falsepositives)”,因?yàn)樵诟?刪除/插入(UDI)操作之后以及上述SQL語(yǔ)句被讀取之前,索引未被鎖定,并且這需要用戶調(diào)整查詢以匹配他們想要監(jiān)視間隙的索引。
[0011]另一可選技術(shù)是在UDI操作后執(zhí)行表的索引掃描,查找與被修改的非時(shí)間關(guān)鍵詞部分匹配的所有關(guān)鍵詞(key),并且在掃描期間確保當(dāng)前行的結(jié)束時(shí)間等于下一行的開(kāi)始時(shí)間。然而,這引入了鎖定與并發(fā)的問(wèn)題,因?yàn)閽呙璞仨氃跀?shù)據(jù)上的索引鎖定和頁(yè)面鎖定已被釋放之后發(fā)生。
【發(fā)明內(nèi)容】
[0012]根據(jù)本發(fā)明的各種實(shí)施例,提供了用于關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的方法和裝置,包括計(jì)算機(jī)程序產(chǎn)品。在關(guān)系數(shù)據(jù)庫(kù)中提供了時(shí)間為一索引。時(shí)間唯一索引包括第一組關(guān)鍵詞。第一組關(guān)鍵詞中的每個(gè)關(guān)鍵詞包括一個(gè)或多個(gè)非時(shí)間關(guān)鍵詞部分以及兩個(gè)時(shí)間關(guān)鍵詞部分,時(shí)間關(guān)鍵詞部分指示時(shí)間開(kāi)始值和時(shí)間結(jié)束值。響應(yīng)于接收到與關(guān)系數(shù)據(jù)庫(kù)中的改變的行有關(guān)的插入語(yǔ)句、更新語(yǔ)句和刪除語(yǔ)句中的一個(gè),在時(shí)間唯一索引中識(shí)別與所改變的行具有相同的非時(shí)間關(guān)鍵詞部分的行。將所識(shí)別的行的時(shí)間關(guān)鍵詞部分與所改變的行的時(shí)間關(guān)鍵詞部分進(jìn)行比較,以確定:所改變的行是否與時(shí)間更早的行和時(shí)間更晚的行直接相鄰,所改變的行與時(shí)間更早的行之間是否檢測(cè)到間隙,或者所改變的行與時(shí)間更晚的行之間是否檢測(cè)到間隙。
[0013]下面在附圖和描述中說(shuō)明本發(fā)明的一個(gè)或多個(gè)實(shí)施例的細(xì)節(jié)。從描述和附圖以及權(quán)利要求,本發(fā)明的其它特征和優(yōu)點(diǎn)將是明顯的。
【專利附圖】
【附圖說(shuō)明】
[0014]圖1-圖8示出了根據(jù)本發(fā)明的各種實(shí)施例的、索引和間隙列表如何受各種UDI操作影響的示例。
[0015]各個(gè)附圖中同樣的參考標(biāo)記指示同樣的元素。
【具體實(shí)施方式】
[0016]總述
[0017]這里描述的各個(gè)實(shí)施例涉及例如可以由RDBMS索引管理器(諸如DB2索引管理器)使用的技術(shù),以在時(shí)間索引上的UDI操作期間維持間隙的列表。作為使用這些技術(shù)的結(jié)果,可以提高RDBMS的性能,對(duì)于時(shí)間索引上的時(shí)間UDI操作需要更少的應(yīng)用開(kāi)發(fā)時(shí)間,并且為用戶獲得增加的價(jià)值。
[0018]根據(jù)各個(gè)實(shí)施例,如果以下信息是已知的:所改變的行的開(kāi)始時(shí)間(已知)、所改變的行的結(jié)束時(shí)間(已知)、前一行的結(jié)束時(shí)間(如果存在)、以及下一行的開(kāi)始時(shí)間(如果存在),則可以在索引插入、刪除或更新(更新就是刪除后立即插入)時(shí)檢查間隙消除。
[0019]這里所使用的表述“前一行”和“下一行”是指匹配索引中的所有其它非時(shí)間關(guān)鍵詞部分的行。前一值和下一值可被用于確定所改變的行是否與該兩行在任一側(cè)上直接時(shí)間相鄰,或者是否存在空白(empty)空間(現(xiàn)有間隙)。
[0020]插入(INSERT)語(yǔ)句可以創(chuàng)建間隙(如果要被插入的行不與前一行或下一行直接相鄰)或者去除間隙(如果要被插入的行與前一行或下一行都直接相鄰,即,在更新(UPDATE)語(yǔ)句中)。
[0021]刪除(DELETE)語(yǔ)句可以創(chuàng)建間隙(如果要被刪除的行與前一行和下一行都直接相鄰)或去除間隙(如果要被刪除的行不與前一行或下一行直接相鄰,即,在更新語(yǔ)句中)。
[0022]有時(shí),插入和刪除語(yǔ)句也可以延伸或分離或截?cái)喱F(xiàn)有間隙。下面將詳細(xì)描述的各種技術(shù)使用間隙檢測(cè)算法,其追蹤最小數(shù)目的已知間隙。如下面將描述的,針對(duì)常用情形優(yōu)化算法,諸如單個(gè)數(shù)據(jù)的常規(guī)插入或刪除,或者完全清除表(即“DELETE FROM T1 (從T1刪除),,)。
[0023]一些更新語(yǔ)句可能產(chǎn)生將由更新的結(jié)束消除(resolve)的臨時(shí)間隙,即,在給定表中的數(shù)據(jù)的情況下,以下更新語(yǔ)句"UPDATE T1SET BUS_START=BUS_START+1M0NTH, BUS_END=BUS_END+1M0NTH〃可能在許多行中產(chǎn)生臨時(shí)間隙,但該更新的最終結(jié)果總是沒(méi)有間隙的表。這是因?yàn)闊o(wú)間隙索引上的每個(gè)事務(wù)必須在索引中無(wú)間隙的情況下完成,否則事務(wù)回退(ro 11 back)。如果事務(wù)以沒(méi)有間隙的表開(kāi)始,則這種索弓I上的任何數(shù)據(jù)庫(kù)操作的最終結(jié)果總是沒(méi)有間隙的表。
[0024]一旦間隙已知,則可以將間隙添加到存儲(chǔ)在可由可以觸及所討論的表的所有代理(agent)訪問(wèn)的存儲(chǔ)器的共享區(qū)域中的鏈接列表。鏈接列表的元素將包括表id、對(duì)象id、索引id、非時(shí)間關(guān)鍵詞部分(或其散列值,以節(jié)省空間)、以及間隙的開(kāi)始和結(jié)束時(shí)間。如果UDI操作將去除間隙,可以通過(guò)下面的算法搜索間隙列表,以找到現(xiàn)有間隙。
[0025]一旦操作完成并且已經(jīng)通過(guò)語(yǔ)句改變所有行,則發(fā)現(xiàn)操作是否導(dǎo)致間隙與檢查間隙列表是否具有任何成員一樣簡(jiǎn)單??梢栽卺槍?duì)遲延的(deferred)唯一'丨生索引的唯一'I"生違反檢查時(shí)完成此檢查。如果操作導(dǎo)致間隙,則事務(wù)將被回退。
[0026]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明的各個(gè)方面可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的各個(gè)方面可以具體實(shí)現(xiàn)為以下形式,即:完全的硬件實(shí)施方式、完全的軟件實(shí)施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結(jié)合的實(shí)施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明的各個(gè)方面還可以實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。
[0027]可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0028]計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括——但不限于——電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0029]計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括——但不限于——無(wú)線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0030]可以以一種或多種程序設(shè)計(jì)語(yǔ)言的任意組合來(lái)編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語(yǔ)言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過(guò)程式程序設(shè)計(jì)語(yǔ)言一諸如“C”語(yǔ)言或類似的程序設(shè)計(jì)語(yǔ)言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任意種類的網(wǎng)絡(luò)——包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來(lái)通過(guò)因特網(wǎng)連接)。
[0031]下面將參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些計(jì)算機(jī)程序指令在通過(guò)計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。
[0032]也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中,這些指令使得計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備以特定方式工作,從而,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的指令的制造品(article of manufacture)0
[0033]也可以把這些計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上,以使得可以在該計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而,在該計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令提供用于實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的處理。
[0034]一些說(shuō)明性示例
[0035]現(xiàn)在將利用可以在RDBMS中執(zhí)行的不同類型的操作的示例說(shuō)明本發(fā)明的各種實(shí)施例。為了這些示例的目的,假設(shè)存在具有關(guān)鍵詞ΚΟ、ΚΙ、K2……Kn的索引。每個(gè)關(guān)鍵詞
Κ由非時(shí)間關(guān)鍵詞部分KpO、Kpl......Κρη和用于時(shí)間開(kāi)始和結(jié)束值的兩個(gè)時(shí)間關(guān)鍵詞部分
ΚρΒ和ΚρΕ組成。時(shí)間開(kāi)始關(guān)鍵詞部分ΚρΒ必須小于ΚρΕ,其中ΚρΒ是包含的(inclusive)而ΚρΕ是單獨(dú)的(exclusive)·。這些限制是時(shí)間關(guān)鍵詞部分定義所固有的。對(duì)于允許ΚρΒ是單獨(dú)的或允許ΚρΕ是包含的的時(shí)間實(shí)施方式,將需要略微修改下述技術(shù)。
[0036]可以三個(gè)不同方式定義這種表中的唯一性:
[0037]非時(shí)間唯一性,其規(guī)定對(duì)于所有關(guān)鍵詞Κ,Κ的所有關(guān)鍵詞部分都是不同的。
[0038]沒(méi)有重疊的時(shí)間唯一性,其附加地規(guī)定對(duì)于所有不同對(duì)的關(guān)鍵詞Κ1和Κ2,滿足以下條件:
[0039]ο 如果 KlpB〈=K2pB,則 Κρ1Ε〈Κ2ρΒ.[0040]ο 如果 Κ1ρΕ>=Κ2ρΕ,則 Κ1ρΒ>=Κ2ρΕ.[0041]沒(méi)有重疊或間隙的時(shí)間唯一性,其附加地規(guī)定對(duì)于所有外部相同的關(guān)鍵詞(下面定義),如果存在與Κ外部相同但時(shí)間上早于Κ的前一關(guān)鍵詞PrevK,則PrevK的ΚρΕ等于Κ的ΚρΒ,并且如果存在與Κ外部相同但時(shí)間上晚于Κ的下一關(guān)鍵詞NextK,則NextK的ΚρΒ等于Κ的ΚρΕ。如果索引中的所有關(guān)鍵詞Κ滿足此要求,則索引被稱為是沒(méi)有間隙的時(shí)間唯
ο
[0042]讓我們稱其中Kp0、Kpl……Κρη等價(jià)的任意兩個(gè)關(guān)鍵詞為外部相同的關(guān)鍵詞,因?yàn)閿?shù)據(jù)的當(dāng)前版本將僅在滿足時(shí)間唯一性約束的表中包含一個(gè)這樣的關(guān)鍵詞。例如,假設(shè)存在具有兩個(gè)關(guān)鍵詞(Joe, ‘123’,01/01/12,02/01/12)和(Joe, ‘ 123’,02/01/12,03/01/12)的時(shí)間索弓丨,則它們是外部相同的。換言之,對(duì)于查詢?cè)摂?shù)據(jù)庫(kù)的用戶,僅存在一個(gè)值(Joe, ‘ 123’),其具有兩個(gè)有效時(shí)段,一個(gè)來(lái)自于1月至2月,一個(gè)來(lái)自于2月至3月。關(guān)鍵詞的非時(shí)間關(guān)鍵詞部分都是相同的,但時(shí)間(開(kāi)始/結(jié)束)關(guān)鍵詞部分是不同的。從數(shù)據(jù)庫(kù)的角度,索引關(guān)鍵詞本身當(dāng)然是完全不同的,但從時(shí)間應(yīng)用的用戶的角度,它們是相同的。
[0043]無(wú)間隙檢查
[0044]如果對(duì)于給定關(guān)鍵詞K,索引不包含PrevK或NextK,則在該時(shí)間方向(更早或更晚)不需要間隙檢查。
[0045]如果索引包含索引中沒(méi)有其它與其外部相同的關(guān)鍵詞的關(guān)鍵詞K,則該關(guān)鍵詞K被稱為在任一側(cè)上沒(méi)有間隙。
[0046]完全沒(méi)有關(guān)鍵詞的索引也被稱為滿足無(wú)間隙約束和無(wú)時(shí)間重疊約束。
[0047]在某些實(shí)施例中,僅在DML (數(shù)據(jù)操縱語(yǔ)言)語(yǔ)句的執(zhí)行的結(jié)束時(shí)檢查無(wú)間隙限制。假設(shè)在選擇(SELECT)操作期間,在索引上不需要存在阻止讀取的鎖,并且對(duì)于UDI操作,在UDI操作的期間,數(shù)據(jù)庫(kù)僅鎖定修改的關(guān)鍵詞的外部相同的關(guān)鍵詞。
[0048]對(duì)于無(wú)間隙索引,索引必須在連續(xù)的狀態(tài)中開(kāi)始任何事務(wù),S卩,所有關(guān)鍵詞滿足沒(méi)有間隙和沒(méi)有重疊的時(shí)間唯一性要求。下面是在索引插入、更新和刪除語(yǔ)句過(guò)程期間可能創(chuàng)建間隙的幾個(gè)情況。
[0049]添加關(guān)鍵詞
[0050]此操作作為SQL語(yǔ)句的部分將關(guān)鍵詞添加到索引。如果新關(guān)鍵詞K具有外部相同的PrevK,其中K->KpB不等于PrevK->KpE,或者如果新關(guān)鍵詞K具有外部相同的NextK,其中K->KpE不等于NextK->KpB,則此操作可能導(dǎo)致在索引中出現(xiàn)間隙。
[0051]插入(INSERT)語(yǔ)句可以將一個(gè)或多個(gè)關(guān)鍵詞添加到索引。例如,如果超過(guò)一個(gè)關(guān)鍵詞正被添加到索引(例如作為來(lái)自SUBSELECT SQL語(yǔ)句的INSERT (插入)的部分),則正被插入的關(guān)鍵詞的順序未被限定。如上所述,即使插入語(yǔ)句的最終結(jié)果是沒(méi)有間隙的索引,插入語(yǔ)句也可以引入臨時(shí)間隙。為此原因,在整個(gè)插入操作完成之前,“添加關(guān)鍵詞”操作不能拋出錯(cuò)誤。
[0052]通過(guò)撤銷(undo)被回退的事務(wù)的所有操作而執(zhí)行數(shù)據(jù)庫(kù)中的回退(ROLLBACK)?;赝瞬僮鞯囊粋€(gè)示例是撤銷刪除操作,其等價(jià)于將關(guān)鍵詞添加到索引中。假設(shè)索引在刪除開(kāi)始之前在連續(xù)的無(wú)間隙狀態(tài)中,在刪除的撤銷期間,應(yīng)該在索引中不造成間隙。
[0053]將第一個(gè)關(guān)鍵詞添加到空白索引中,或者添加針對(duì)給定一組的非時(shí)間關(guān)鍵詞部分的第一個(gè)外部相同的關(guān)鍵詞將永遠(yuǎn)不會(huì)造成間隙??梢詸z測(cè)這兩種情形,或者可以在此插入語(yǔ)句期間禁用間隙檢測(cè)。
[0054]刪除關(guān)鍵詞
[0055]此操作作為SQL語(yǔ)句的部分從索引去除關(guān)鍵詞。如果所刪除的關(guān)鍵詞K具有外部相同的PrevK,其中K->KpB等于PrevK_>KpE,并且所刪除的關(guān)鍵詞具有外部相同的Nextk,其中K->KpE等于NextK-KpB,則此操作可以在索引中導(dǎo)致間隙的出現(xiàn)。如果所刪除的關(guān)鍵詞k緊挨在該索引中之前或之后沒(méi)有外部相同的關(guān)鍵詞,則不能造成間隙。注意,用于關(guān)鍵詞刪除的間隙檢測(cè)算法與用于關(guān)鍵詞插入的間隙檢測(cè)算法相反。
[0056]刪除語(yǔ)句可以從索引刪除一個(gè)或多個(gè)關(guān)鍵詞。如果正從索引刪除超過(guò)一個(gè)關(guān)鍵詞,則正被刪除的關(guān)鍵詞的順序未被限定,并且,即使刪除語(yǔ)句的最終結(jié)果是沒(méi)有間隙的索弓丨,刪除語(yǔ)句也可以引入臨時(shí)間隙。為此原因,在整個(gè)刪除操作完成之前,刪除關(guān)鍵詞的操作不能拋出錯(cuò)誤。
[0057]刪除索引的最后一個(gè)關(guān)鍵詞,或者刪除針對(duì)給定一組的非時(shí)間關(guān)鍵詞部分的最后一個(gè)外部相同的關(guān)鍵詞將永遠(yuǎn)不會(huì)造成間隙。可以檢測(cè)這兩種情況,或者在此刪除語(yǔ)句期間可以禁用間隙檢測(cè)。
[0058]更新操作
[0059]如在關(guān)鍵詞刪除之后插入不同的關(guān)鍵詞一樣,處理更新語(yǔ)句。因此,上述用于添加或刪除關(guān)鍵詞的邏輯在更新操作內(nèi)發(fā)生,并且如果拋出針對(duì)間隙的錯(cuò)誤,則僅在語(yǔ)句結(jié)束時(shí)將在關(guān)鍵詞的添加或刪除期間檢測(cè)到的任何間隙記錄在間隙列表中。
_0] 維持操作的臨時(shí)間隙的列表
[0061]通過(guò)間隙的時(shí)間范圍的開(kāi)始和結(jié)束描述間隙。開(kāi)始和結(jié)束值不能為空(NULL),并且不能是負(fù)無(wú)限大或正無(wú)限大。僅可以在未被當(dāng)前UDI語(yǔ)句刪除的兩個(gè)關(guān)鍵詞值之間出現(xiàn)間隙。在一些實(shí)施例中,已知間隙的列表被維持為可查詢樹(shù)(諸如二叉樹(shù)或B樹(shù)),并且每個(gè)間隙列表一次僅可由一個(gè)數(shù)據(jù)庫(kù)工作單元讀取和寫入,并且一次將包含用于一個(gè)索引的間隙的列表。這避免了多個(gè)工作單元干擾彼此的間隙檢查。
[0062]在添加或刪除關(guān)鍵詞的操作期間找到間隙的任何時(shí)間,可以將間隙條目添加到該間隙列表。間隙條目包括非時(shí)間關(guān)鍵詞部分、間隙開(kāi)始時(shí)間和間隙結(jié)束時(shí)間。間隙開(kāi)始和結(jié)束時(shí)間由下一個(gè)或前一個(gè)外部相同的關(guān)鍵詞的開(kāi)始或結(jié)束時(shí)間以及新添加的或刪除的關(guān)鍵詞的開(kāi)始或結(jié)束時(shí)間確定。
[0063]以此方式,間隙列表將用作索引的鏡子(miiror)。索引中存在的任何值將不在間隙列表中,并且間隙列表中存在的任何間隙將不出現(xiàn)在索引中。因此,為了最小化這些間隙列表的尺寸,在添加和刪除關(guān)鍵詞時(shí)找到的間隙將與已知間隙組合,或者去除已知間隙,這取決于特定規(guī)則。
[0064]為了進(jìn)一步說(shuō)明這一點(diǎn),請(qǐng)考慮以下情況A-E,下面將參照【專利附圖】
【附圖說(shuō)明】它們。為了下面情況A-E中的示例的目的,假設(shè)存在連續(xù)(consistent)的索引以及特定范圍的時(shí)間關(guān)鍵詞值,其具有時(shí)間開(kāi)始和結(jié)束值TO、Tl、T2、T3、T4和T5。時(shí)間范圍Τ1→T2被從索引中刪除,并被添加到間隙列表中,如圖1所示。
[0065]情況A:新添加的間隙與現(xiàn)有間隙相鄰
[0066]如果新添加的間隙與列表中的現(xiàn)有間隙相鄰(即,新間隙的ΚρΕ等于現(xiàn)有間隙的ΚρΒ,和/或新間隙的ΚρΒ等于現(xiàn)有間隙的ΚρΕ),則一側(cè)或兩側(cè)上的間隙將受此間隙的添加的影響。
[0067]情況Α1:其一個(gè)示例是是否從索引刪除時(shí)間范圍Τ0->Τ1。間隙列表包含Τ1->Τ2,此新間隙與現(xiàn)有間隙相鄰且早于現(xiàn)有間隙,但本身在列表中沒(méi)有更早的間隙。也沒(méi)有晚于Τ1的間隙,因此,值Τ0→T1的刪除將使得必須從間隙列表中去除間隙Τ1→T2,使間隙列表為空。索引此時(shí)在其中沒(méi)有間隙,因?yàn)樽钤绲闹禐棣?。因?yàn)殚g隙不能具有無(wú)窮大的開(kāi)始或結(jié)束時(shí)間,所以如果最早或最后的值被刪除,則這具有去除了相鄰的已知間隙的效果。圖2中示出了更新的索引和間隙列表。
[0068]情況Α2:現(xiàn)在考慮從索引刪除時(shí)間范圍Τ2→T3的情況。接著,將現(xiàn)有間隙Τ1_>Τ2擴(kuò)展變?yōu)閺摩?→T3的間隙。間隙列表仍然僅具有一個(gè)已知間隙,盡管已經(jīng)從索引中刪除了兩個(gè)關(guān)鍵詞值。以此方式,最小數(shù)目的間隙被記錄在間隙列表中,并且其將永遠(yuǎn)不大于索引本身中的關(guān)鍵詞的數(shù)目的一半。圖3示出了更新的索引和間隙列表。
[0069]情況A3:考虎間隙列表包含兩個(gè)間隙Τ1->Τ2和Τ3_>Τ4的情況,如圖4Α中所示。引入新間隙Τ2-Χ3,其與間隙列表中的兩個(gè)間隙都相鄰。前一間隙的ΚρΕ現(xiàn)在變?yōu)楹笠婚g隙的ΚρΕ,并且后一間隙被從列表中去除,使得間隙列表中留下單個(gè)間隙Τ1-Χ4,如圖4Β中所示。
[0070]情況Β:新添加的間隙沒(méi)有相鄰間隙
[0071]如果新添加的間隙在列表中沒(méi)有相鄰間隙,但在列表中存在更早或更晚的外部相同的關(guān)鍵詞值,這是一個(gè)新間隙。例如,如果從圖1中所示的原始索引和間隙列表,要從索引中刪除Τ3-Τ4,則此間隙將被添加到間隙列表,不會(huì)與現(xiàn)有間隙Τ1-Χ2組合或修改現(xiàn)有間隙Τ1-Χ2,如圖5中所示。
[0072]情況C:從間隙列表中刪除間隙
[0073]如果從間隙列表中刪除間隙(即,當(dāng)索引關(guān)鍵詞在被刪除之后被在相同工作單元內(nèi)添加回到索引),并且該間隙精確地匹配已知間隙,則從間隙列表去除該間隙。例如,如果現(xiàn)有間隙Τ1-Χ2被從如圖1所示的間隙列表中刪除,則所產(chǎn)生的索引和間隙列表將如圖6中的索引和間隙列表。 [0074]情況D:新刪除的間隙被完全包含在現(xiàn)有間隙內(nèi)
[0075]如果新刪除的間隙被完全包含在現(xiàn)有間隙內(nèi),則間隙必須被分離為兩個(gè),前半個(gè)間隙具有與所刪除的間隙的ΚρΒ相等的ΚρΕ,后半個(gè)間隙具有與所刪除的間隙的ΚρΕ相等的ΚρΒ。例如,如果間隙列表包含Τ1-Χ4,如圖7Α中所示,并且間隙Τ2-Χ3被去除,則間隙列表將包含Τ1-Χ2和Τ3-Χ4,如圖7Β中所示。
[0076]情況Ε:新刪除的間隙部分包含在現(xiàn)有間隙內(nèi)
[0077]如果新刪除的間隙部分包含在現(xiàn)有間隙內(nèi),則現(xiàn)有間隙的開(kāi)始或結(jié)束時(shí)間必須被修改,效果上縮短了已知間隙。例如,如果間隙列表包含Τ1-Χ4,如圖8Α中所示,并且間隙Τ3-Χ4被從列表去除,則現(xiàn)有間隙將變?yōu)棣?-Χ3,如圖8Β中所示。
[0078]在操作結(jié)束時(shí),通過(guò)觀察間隙列表并看是否還存在任何元素來(lái)檢查間隙的存在將很簡(jiǎn)單。造成間隙的索引操作將被回退,并且在此回退操作期間,可以掛起所有間隙檢查,因?yàn)榛赝吮WC索引回到其原始的連續(xù)狀態(tài)。
[0079]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
[0080]這里使用的術(shù)語(yǔ)僅用于描述特定實(shí)施例的目的,而不意在限制本發(fā)明。如這里所使用的,單數(shù)形式也意在包含復(fù)數(shù)形式,除非上下文清楚表明不是這樣。還將理解,詞語(yǔ)“包括”和/或“包含”當(dāng)在該說(shuō)明書中使用時(shí)表示所陳述的特征、數(shù)字、步驟、操作、元素和/或組件的存在,但不排除一個(gè)或多個(gè)其它特征、數(shù)字、步驟、操作、元素、組件和/或它們的組合的存在或添加。[0081]權(quán)利要求中的所有裝置或步驟加功能元素的相應(yīng)結(jié)構(gòu)、材料、動(dòng)作和等同體意在包括用于與具體主張的其它權(quán)利要求元素組合地執(zhí)行功能的任何結(jié)構(gòu)、材料或動(dòng)作。已經(jīng)為了說(shuō)明和描述的目的呈現(xiàn)了本發(fā)明的描述,但其不意在為是窮舉的或者將本發(fā)明限制到所公開(kāi)的形式。對(duì)于本領(lǐng)域的技術(shù)人員而言,在不偏離本發(fā)明的范圍和精神的情況下,許多修改和改變是明顯的。例如,可以如下建模的間隙列表處理這里所描述的各種實(shí)施例:B樹(shù)、或散列表、或鏈接列表、或任何Java庫(kù)(HashMap、TreeMap等)、或XML文件等,如本領(lǐng)域的技術(shù)人員所熟悉的。只要遵循所述規(guī)則,算法不強(qiáng)制要求間隙列表(或索引或數(shù)據(jù)庫(kù))的實(shí)施方式。為了最佳地說(shuō)明本發(fā)明的原理和實(shí)際應(yīng)用,以及為了使本領(lǐng)域的技術(shù)人員能夠針對(duì)具有適合于所想到的特定用途的各種修改的各種實(shí)施例而理解本發(fā)明,選擇和說(shuō)明了實(shí)施例。
【權(quán)利要求】
1.一種用于關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的方法,包括:在關(guān)系數(shù)據(jù)庫(kù)中提供時(shí)間唯一索引,其中所述時(shí)間唯一索引包括第一組關(guān)鍵詞,其中所述第一組關(guān)鍵詞中的每個(gè)關(guān)鍵詞包括一個(gè)或多個(gè)非時(shí)間關(guān)鍵詞部分和指示時(shí)間開(kāi)始值和時(shí)間結(jié)束值的兩個(gè)時(shí)間關(guān)鍵詞部分;以及響應(yīng)于接收到與所述關(guān)系數(shù)據(jù)庫(kù)中的改變的行有關(guān)的插入語(yǔ)句、更新語(yǔ)句和刪除語(yǔ)句之一,識(shí)別所述時(shí)間唯一索引中與所改變的行具有相同非時(shí)間關(guān)鍵詞部分的行,以及將所識(shí)別的行的時(shí)間關(guān)鍵詞部分與所改變的行的時(shí)間關(guān)鍵詞部分進(jìn)行比較,以確定:所改變的行是否與時(shí)間上更早的行和時(shí)間上更晚的行都直接相鄰,是否在所改變的行和時(shí)間上更早的行之間檢測(cè)到間隙,或者是否在所改變的行與時(shí)間上更晚的行之間檢測(cè)到間隙。
2.如權(quán)利要求1所述的方法,還包括:響應(yīng)于檢測(cè)到間隙,將關(guān)于所述間隙的數(shù)據(jù)存儲(chǔ)在間隙列表中。
3.如權(quán)利要求2所述的方法,還包括:將所述間隙列表存儲(chǔ)在具有訪問(wèn)所述關(guān)系數(shù)據(jù)庫(kù)中的所述時(shí)間唯一索引的權(quán)限的代理能夠訪問(wèn)的存儲(chǔ)器的共享區(qū)域中。
4.如權(quán)利要求3所述的方法,其中所述間隙列表被作為可查詢樹(shù)而保持在所述存儲(chǔ)器中。
5.如權(quán)利要求2所述的方法`,其中所述間隙列表是鏈接列表,所述鏈接列表針對(duì)每個(gè)被檢測(cè)的間隙包含以下元素中的一個(gè)或多個(gè):表識(shí)別符、對(duì)象識(shí)別符、索引識(shí)別符、非時(shí)間關(guān)鍵詞部分、以及所述間隙的開(kāi)始和結(jié)束時(shí)間。
6.如權(quán)利要求5所述的方法,還包括:對(duì)所述元素中的至少一些進(jìn)行散列化,以節(jié)省所述存儲(chǔ)器中的空間。
7.如權(quán)利要求2所述的方法,還包括:響應(yīng)于接收到與所述關(guān)系數(shù)據(jù)庫(kù)中的改變的行有關(guān)的插入語(yǔ)句、更新語(yǔ)句和刪除語(yǔ)句之一,搜索所述間隙列表,以確定所述語(yǔ)句執(zhí)行的操作是否造成了間隙。
8.如權(quán)利要求7所述的方法,其中在針對(duì)延遲的唯一性索引的唯一性違反檢查時(shí),執(zhí)行所述間隙列表的搜索;以及響應(yīng)于確定所述操作造成了間隙,回退造成所述間隙的所述操作。
9.如權(quán)利要求2所述的方法,其中所述間隙列表一次僅能夠由一個(gè)數(shù)據(jù)庫(kù)工作單元讀取和寫入;以及所述間隙列表一次僅包含用于一個(gè)時(shí)間唯一索引的間隙。
10.如權(quán)利要求2所述的方法,還包括:當(dāng)新識(shí)別的間隙被添加到所述間隙列表時(shí),根據(jù)一組預(yù)定規(guī)則,通過(guò)組合一個(gè)或多個(gè)間隙或通過(guò)去除已知間隙來(lái)減小所述間隙列表的尺寸。
11.一種用于關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的系統(tǒng),包括用于實(shí)現(xiàn)權(quán)利要求1-10的任意方法的任意步驟的裝置。
12.一種用于關(guān)系數(shù)據(jù)庫(kù)中時(shí)間唯一索引中的間隙檢測(cè)的系統(tǒng),包括:數(shù)據(jù)儲(chǔ)存器,可操作來(lái)存儲(chǔ)關(guān)系數(shù)據(jù)庫(kù),所述關(guān)系數(shù)據(jù)庫(kù)包括時(shí)間唯一索引,所述時(shí)間唯一索引具有第一組關(guān)鍵詞,其中所述第一組關(guān)鍵詞中的每個(gè)關(guān)鍵詞包括一個(gè)或多個(gè)非時(shí)間關(guān)鍵詞部分和指示時(shí)間開(kāi)始值和時(shí)間結(jié)束值的兩個(gè)時(shí)間關(guān)鍵詞部分;以及服務(wù)器計(jì)算機(jī),可操作來(lái)控制所述關(guān)系數(shù)據(jù)庫(kù)并可操作來(lái)執(zhí)行用于處理對(duì)來(lái)自所述關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)的用戶查詢的方法動(dòng)作,所述方法動(dòng)作包括:響應(yīng)于接收到與所述關(guān)系數(shù)據(jù)庫(kù)中的改變的行有關(guān)的插入語(yǔ)句、更新語(yǔ)句和刪除語(yǔ)句之一,通過(guò)所述服務(wù)器計(jì)算機(jī)識(shí)別所述時(shí)間唯一索引中與所改變的行具有相同非時(shí)間關(guān)鍵詞部分的行,以及通過(guò)所述服務(wù)器計(jì)算機(jī)將所識(shí)別的行的時(shí)間關(guān)鍵詞部分與所改變的行的時(shí)間關(guān)鍵詞部分進(jìn)行比較,以確定:所改變的行是否與時(shí)間上更早的行和時(shí)間上更晚的行都直接相鄰,是否在所改變的行和時(shí)間上更早的行之間檢測(cè)到間隙,或者是否在所改變的行與時(shí)間上更晚的行之間檢測(cè)到 間隙。
【文檔編號(hào)】G06F17/30GK103631843SQ201310363334
【公開(kāi)日】2014年3月12日 申請(qǐng)日期:2013年8月20日 優(yōu)先權(quán)日:2012年8月20日
【發(fā)明者】R.P.斯帕爾滕 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司