專利名稱:一種管理數(shù)據(jù)庫索引的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的各實(shí)施方式涉及數(shù)據(jù)庫管理,并且更具體地,涉及一種管理數(shù)據(jù)庫索引的方法、裝置和相關(guān)計(jì)算機(jī)程序產(chǎn)品。
背景技術(shù):
數(shù)據(jù)庫技術(shù)的發(fā)展為各種計(jì)算機(jī)應(yīng)用提供了強(qiáng)大的數(shù)據(jù)組織、數(shù)據(jù)管理和數(shù)據(jù)存儲(chǔ)能力。近年來,數(shù)據(jù)庫存儲(chǔ)容量逐漸增加并且用戶對(duì)數(shù)據(jù)庫執(zhí)行的各種操作也愈加復(fù)雜和頻繁,如何確保數(shù)據(jù)庫在可預(yù)期的響應(yīng)時(shí)間內(nèi)快速返回用戶期望的結(jié)果,這已經(jīng)成為數(shù)據(jù)庫領(lǐng)域的一個(gè)研究熱點(diǎn)。在現(xiàn)有的數(shù)據(jù)庫管理系統(tǒng)(DBMS)中,已經(jīng)廣泛使用了數(shù)據(jù)庫索引技術(shù),數(shù)據(jù)庫索引是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中 的特定信息。數(shù)據(jù)庫索引可以大大加快查詢操作的響應(yīng)速度,然而在改進(jìn)查詢性能的同時(shí),索引還可能產(chǎn)生一些負(fù)面影響。當(dāng)對(duì)數(shù)據(jù)庫中的表進(jìn)行數(shù)據(jù)操縱操作(S卩,DML操作,如,插入、刪除和修改)時(shí),還可能需要更新索引。此時(shí),數(shù)據(jù)庫管理系統(tǒng)不但需要修改數(shù)據(jù)庫的各個(gè)表中的數(shù)據(jù),還需要更新受到該DML操作影響的索引。也即,只有將數(shù)據(jù)庫中的表和受影響的索引兩者均成功更新之后,才能認(rèn)為該DML操作完成。在僅成功更新數(shù)據(jù)庫中的表而尚未更新受影響的索引時(shí),此時(shí)的索引并不能反應(yīng)數(shù)據(jù)庫的真實(shí)情況。于是,若基于其更新尚未完成的索引對(duì)表進(jìn)行查詢,則可能出現(xiàn)返回結(jié)果與數(shù)據(jù)庫中存儲(chǔ)的最新數(shù)據(jù)不一致的情況。對(duì)于大規(guī)模數(shù)據(jù)庫,其索引可能是十分復(fù)雜的數(shù)據(jù)結(jié)構(gòu),因而更新索引所花費(fèi)的時(shí)間可能會(huì)對(duì)數(shù)據(jù)庫的響應(yīng)時(shí)間產(chǎn)生不利影響。
發(fā)明內(nèi)容
因而,為了提高對(duì)索引進(jìn)行管理和維護(hù)的效率,期望能夠提供一種以快速響應(yīng)方式來管理數(shù)據(jù)庫索引的方法、設(shè)備和相應(yīng)的計(jì)算機(jī)程序產(chǎn)品,并且還期望可以在盡量不改變數(shù)據(jù)庫管理系統(tǒng)現(xiàn)有設(shè)置的情況下進(jìn)行操作。為此,本發(fā)明的各實(shí)施方式提供了一種采用服務(wù)索引來管理數(shù)據(jù)庫索引的方法、裝置和計(jì)算機(jī)程序產(chǎn)品。在一個(gè)實(shí)施方式中,提供了一種管理數(shù)據(jù)庫索引的方法。該方法包括創(chuàng)建主索引;創(chuàng)建至少一個(gè)服務(wù)索引,其中至少一個(gè)服務(wù)索引用于記錄主索引中將被更新節(jié)點(diǎn)的變化;檢測(cè)數(shù)據(jù)庫中是否出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作;響應(yīng)于在數(shù)據(jù)庫中出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作,利用至少一個(gè)服務(wù)索引來對(duì)主索引進(jìn)行維護(hù),其中維護(hù)是基于至少一個(gè)服務(wù)索引中記錄的、主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)至少包括與主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息以及針對(duì)主索引進(jìn)行的操作類型。在一個(gè)實(shí)施方式中,針對(duì)數(shù)據(jù)庫執(zhí)行的操作包括針對(duì)數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)操縱操作和數(shù)據(jù)查詢操作中的至少一個(gè)。
在一個(gè)實(shí)施方式中,提供了一種管理數(shù)據(jù)庫索引的裝置。該裝置包括第一創(chuàng)建裝置,被配置用于創(chuàng)建主索引;第二創(chuàng)建裝置,被配置用于創(chuàng)建至少一個(gè)服務(wù)索引,其中至少一個(gè)服務(wù)索引用于記錄主索引中將被更新節(jié)點(diǎn)的變化;檢測(cè)裝置,被配置用于檢測(cè)數(shù)據(jù)庫中是否出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作;索引裝置,被配置用于響應(yīng)于在數(shù)據(jù)庫中出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作,利用至少一個(gè)服務(wù)索引來對(duì)主索引進(jìn)行維護(hù),其中維護(hù)是基于至少一個(gè)服務(wù)索引中記錄的、主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)至少包括與主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息以及針對(duì)主索引進(jìn)行的操作類型。在一個(gè)實(shí)施方式中,索引裝置包括以下至少一個(gè)操縱裝置,被配置用于在對(duì)數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)操縱操作中對(duì)主索引和服務(wù)索引中的至少一項(xiàng)進(jìn)行維護(hù);以及查詢裝置,被 配置用于在對(duì)數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)查詢操作中獲取查詢結(jié)果。采用根據(jù)本發(fā)明的各實(shí)施方式,可以通過基于主索引和至少一個(gè)服務(wù)索引來管理數(shù)據(jù)庫中的索引。并且,可以加快與數(shù)據(jù)操縱操作相關(guān)聯(lián)的更新索引的響應(yīng)速度;還可以將對(duì)查詢操作的影響最小化并且確保索引的正確性。
結(jié)合附圖并參考以下詳細(xì)說明,本發(fā)明各實(shí)施方式的特征、優(yōu)點(diǎn)及其他方面將變得更加明顯,在附圖中圖I是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的利用服務(wù)索引管理數(shù)據(jù)庫索引的方法的流程圖;圖2是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的用于創(chuàng)建/調(diào)整索引的方法的流程圖;圖3是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的服務(wù)索引中節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)的示意圖;圖4是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的主索引和服務(wù)索引的樹形結(jié)構(gòu)的示意圖;圖5是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的執(zhí)行數(shù)據(jù)操縱操作的方法的流程圖;圖6是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的合并查詢主索引和服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果的過程的示意圖;以及圖7是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的用于利用服務(wù)索引管理數(shù)據(jù)庫的裝置的框圖。
具體實(shí)施例方式下面參考附圖詳細(xì)描述本發(fā)明的各實(shí)施方式。附圖中的流程圖和框圖,圖示了按照本發(fā)明各種實(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è)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。在一個(gè)實(shí)施方式中,可以基于快速響應(yīng)策略并利用主索引和至少一個(gè)服務(wù)索引來提高數(shù)據(jù)庫訪問速度。在一個(gè)實(shí)施方式中,響應(yīng)于涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作,利用至少一個(gè)服務(wù)索引來對(duì)主索引進(jìn)行維護(hù)。下面首先概述本發(fā)明各實(shí)施方式中某些術(shù)語的含義。
快速響應(yīng)策略快速響應(yīng)策略是指一種快速更新主索引和至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)的策略,其原理在于,一旦至少一個(gè)服務(wù)索引和主索引中的任一項(xiàng)被成功更新,則認(rèn)為針對(duì)數(shù)據(jù)庫進(jìn)行的DML操作結(jié)束。因而采用快速響應(yīng)策略可以改進(jìn)數(shù)據(jù)操作的效率。主索引本發(fā)明各實(shí)施方式中的主索引對(duì)應(yīng)于常規(guī)索弓丨,為了與服務(wù)索引相區(qū)別而將其稱為主索引。服務(wù)索引服務(wù)索引是用于記錄主索引中將被更新節(jié)點(diǎn)的變化的索引。與主索引數(shù)據(jù)結(jié)構(gòu)的區(qū)別在于,服務(wù)索引的節(jié)點(diǎn)中還包括針對(duì)主索引的操作類型(如插入或刪除)。服務(wù)索引是為主索引服務(wù)的,其節(jié)點(diǎn)數(shù)據(jù)是針對(duì)主索引節(jié)點(diǎn)的變化過程的數(shù)據(jù)。在整個(gè)索引結(jié)構(gòu)(主索引及至少一個(gè)服務(wù)索引)中,服務(wù)索引的參數(shù)及類型的定義可以獨(dú)立于主索弓丨,以便加速索引結(jié)構(gòu)的更新和維護(hù),從而提高針對(duì)數(shù)據(jù)庫的各種數(shù)據(jù)操作的性能。應(yīng)當(dāng)注意,在不同實(shí)施方式中可以基于不同的需求而設(shè)置一個(gè)或者多個(gè)服務(wù)索弓I。在一個(gè)實(shí)施方式中,全部服務(wù)索引(可以包括一個(gè)或者多個(gè))中的節(jié)點(diǎn)所記錄的變化最終將被更新到主索引中。盡管在某些時(shí)刻,主索引自身并不能單獨(dú)反應(yīng)與已更新數(shù)據(jù)庫的表相對(duì)應(yīng)的索引狀態(tài)。然而至少一個(gè)服務(wù)索引和主索引可以作為一個(gè)整體運(yùn)行,并反應(yīng)與已更新數(shù)據(jù)庫的表相對(duì)應(yīng)的最新索引信息。由于至少一個(gè)服務(wù)索引和主索引中的任一項(xiàng)被成功更新時(shí),則認(rèn)為數(shù)據(jù)操縱操作結(jié)束,這大大加快了更新數(shù)據(jù)庫索引的速度。已經(jīng)概括描述了本發(fā)明各實(shí)施方式的基本原理和應(yīng)用環(huán)境,在下文中,將參加圖I至圖7詳細(xì)描述本發(fā)明的一些實(shí)施方式。圖I是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的利用服務(wù)索引管理數(shù)據(jù)庫索引的方法的流程圖100。如步驟S102所示,首先創(chuàng)建主索引;繼而在步驟S104中,創(chuàng)建至少一個(gè)服務(wù)索引。應(yīng)當(dāng)注意,此處的主索引即對(duì)應(yīng)于常規(guī)索引。在數(shù)據(jù)庫中已經(jīng)存在常規(guī)索引時(shí),可以基于本發(fā)明的實(shí)施方式創(chuàng)建至少一個(gè)服務(wù)索引,并調(diào)整已有的常規(guī)索引適應(yīng)于本發(fā)明的實(shí)施方式;否則,可以基于本發(fā)明的實(shí)施方式創(chuàng)建主索引和至少一個(gè)服務(wù)索引。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引用于記錄主索引中將被更新節(jié)點(diǎn)的變化。應(yīng)當(dāng)注意,本發(fā)明各實(shí)施方式中的服務(wù)索引并不同于常規(guī)索引。常規(guī)索引中保存的是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),目的在于使用該常規(guī)索引可快速訪問數(shù)據(jù)庫表中的特定信息。而本發(fā)明各實(shí)施方式中的至少一個(gè)服務(wù)索引目的在于,記錄主索引中將被更新節(jié)點(diǎn)的變化,以便在主索引尚未完成更新時(shí),可以通過主索引和至少一個(gè)服務(wù)索引計(jì)算得出數(shù)據(jù)庫中當(dāng)前最新的數(shù)據(jù)。 發(fā)明人認(rèn)為,針對(duì)數(shù)據(jù)庫進(jìn)行DML操作時(shí)可能會(huì)導(dǎo)致需要更新數(shù)據(jù)庫索引。如果數(shù)據(jù)庫的索引規(guī)模較小,則更新該索引僅需要很少的時(shí)間。也即,更新小的索引的效率通常高于更新大的索引的效率。在某些實(shí)施方式中,采取創(chuàng)建規(guī)模小于主索引(也即對(duì)應(yīng)于常規(guī)索引)的至少一個(gè)服務(wù)索引來加快更新索引的速度,進(jìn)而縮小針對(duì)數(shù)據(jù)庫的數(shù)據(jù)操作的響應(yīng)時(shí)間。然而更新小的索引的效率并不總是高于更新大的索引的效率,在某些特定情況下還會(huì)出現(xiàn)大的索引首先被更新完畢的情況。因而在一個(gè)實(shí)施方式中,可以并行地更新主索引和至少一個(gè)服務(wù)索引,以便獲得最優(yōu)的效率。在步驟S106中,檢測(cè)數(shù)據(jù)庫中是否出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作。由于本發(fā)明的實(shí)施方式旨在于管理數(shù)據(jù)庫的索引,當(dāng)針對(duì)數(shù)據(jù)庫執(zhí)行的操作并不涉及主索引時(shí),則不屬于本發(fā)明的實(shí)施方式考慮的范圍,因而在此設(shè)置檢測(cè)步驟S106。在步驟S108中,響應(yīng)于在數(shù)據(jù)庫中出現(xiàn)涉及所述主索引的、針對(duì)所述數(shù)據(jù)庫執(zhí)行操作,利用所述至少一個(gè)服務(wù)索引來對(duì)主索引進(jìn)行維護(hù)。此時(shí),這種維護(hù)是基于所述至少一個(gè)服務(wù)索引中記錄的、所述主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的,并且主索引和至少一個(gè)服務(wù)索引對(duì)外表現(xiàn)為一個(gè)整體,而在主索引和至少一個(gè)服務(wù)索引之間基于預(yù)定義的規(guī)則協(xié)調(diào)操作。在一個(gè)實(shí)施方式中,針對(duì)數(shù)據(jù)庫執(zhí)行操作可以包括針對(duì)數(shù)據(jù)庫執(zhí)行數(shù)據(jù)操縱操 作和數(shù)據(jù)查詢操作中的至少一個(gè)。應(yīng)當(dāng)注意,在如下情況下可能涉及到對(duì)主索引的操作
(I)在對(duì)數(shù)據(jù)庫中的表進(jìn)行DML操作時(shí),對(duì)各種表進(jìn)行增刪改的操作可以導(dǎo)致需要更新主索引,然而并非所有的DML操作均會(huì)導(dǎo)致更新索引。(2)在查詢數(shù)據(jù)庫時(shí),通常針對(duì)主索引進(jìn)行查詢以便加快響應(yīng)速度,因此數(shù)據(jù)查詢操作也會(huì)涉及主索引。應(yīng)當(dāng)注意,在一個(gè)實(shí)施方式中,利用至少一個(gè)服務(wù)索引來對(duì)所述主索引進(jìn)行維護(hù)是與針對(duì)數(shù)據(jù)庫的其他操作同步執(zhí)行的。也即,該維護(hù)操作并不排除針對(duì)數(shù)據(jù)庫執(zhí)行數(shù)據(jù)操縱操作和數(shù)據(jù)查詢操作,并且本發(fā)明提供了用于數(shù)據(jù)操縱操作和數(shù)據(jù)查詢操作的具體實(shí)施方式
。此時(shí),兩種索引作為一個(gè)整體同步地關(guān)聯(lián)于數(shù)據(jù)庫中的數(shù)據(jù)。在一個(gè)實(shí)施方式中,當(dāng)對(duì)數(shù)據(jù)庫執(zhí)行數(shù)據(jù)操縱操作和/或數(shù)據(jù)查詢操作時(shí),主索引和至少一個(gè)服務(wù)索引作為一個(gè)整體提供快速更新數(shù)據(jù)庫索引的功能。在針對(duì)數(shù)據(jù)庫執(zhí)行其他操作的同時(shí)同步地維護(hù)主索引,一方面可以使主索引和至少一個(gè)服務(wù)索引實(shí)時(shí)地反映數(shù)據(jù)庫中的數(shù)據(jù);另一方面,相對(duì)于已經(jīng)更新了數(shù)據(jù)庫中的數(shù)據(jù)然而卻在一段時(shí)間后再維護(hù)數(shù)據(jù)庫索引的異步方式而言,本發(fā)明的同步方式無需額外的時(shí)間來維護(hù)索引,同時(shí)還不影響針對(duì)數(shù)據(jù)庫進(jìn)行的其他操作。本發(fā)明實(shí)施方式的方法與常規(guī)則數(shù)據(jù)庫兼容,可以在盡量少修改現(xiàn)有數(shù)據(jù)庫管理系統(tǒng)配置的情況下實(shí)現(xiàn)。在現(xiàn)有DBMS中,存在以下涉及維護(hù)索引的數(shù)據(jù)定義語言(DDL)聲明,例如CREATE INDEX idx_name ON TABLE tb_name(columnI,;ALTER INDEX idx_name...;在一個(gè)實(shí)施方式中,可以增加關(guān)鍵字enable_fast_response和disable_fast_response。并且下文示出了根據(jù)一個(gè)實(shí)施方式的示例(I)創(chuàng)建快速響應(yīng)模式的索引CREATE INDEX idx_name on TABLE tb_name(columnI,enable_fast_response with n...;(2)將快速響應(yīng)模式的索引調(diào)整為常規(guī)模式ALTER INDEX idx_name. . . disable_fast_response...;(3)將常規(guī)模式的索引調(diào)整為快速響應(yīng)模式ALTER INDEX idx_name. . . enable_fast_response with n...;
圖2是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的用于創(chuàng)建/調(diào)整索引的方法的流程圖200。在步驟S202中,開始創(chuàng)建/調(diào)整索引的操作,并且在步驟S204中,基于上文定義的關(guān)鍵字判斷該創(chuàng)建/調(diào)整索引的操作是基于本發(fā)明實(shí)施方式的快速響應(yīng)模式還是基于常規(guī)模式。當(dāng)判斷結(jié)果為“是”,則操作前進(jìn)至步驟S206,以快速響應(yīng)模式創(chuàng)建/調(diào)整索引;否則,操作前進(jìn)至步驟S208以常規(guī)模式創(chuàng)建/調(diào)整索引。圖3是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的服務(wù)索引中節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)的示意圖300,這僅僅是服務(wù)索引中節(jié)點(diǎn)的一個(gè)示意性數(shù)據(jù)結(jié)構(gòu)。服務(wù)索引與主索引的數(shù)據(jù)結(jié)構(gòu)的區(qū)別在于,服務(wù)索引的節(jié)點(diǎn)中還保持針對(duì)主索引數(shù)據(jù)的操作類型(如插入或刪除)。服務(wù)索引的節(jié)點(diǎn)還可以采用其他的數(shù)據(jù)結(jié)構(gòu), 只要能夠反映主索引中數(shù)據(jù)的變化信息即可。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)至少包括與主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息以及針對(duì)主索引進(jìn)行的操作類型。如圖3所示,字段302和字段304兩者整體表示與主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息,也即分別示出為行ID 302和值304。字段306表示針對(duì)主索引進(jìn)行的操作類型(例如,以“I”表示“插入”,以“D”表示“刪除”)。例如,服務(wù)索引中的一個(gè)節(jié)點(diǎn)可以示出為(R0,VI,I),該三元組的含義是,針對(duì)主索引進(jìn)行“插入”操作,并且主索引中相關(guān)聯(lián)節(jié)點(diǎn)的行ID是R0,值為VI。又例如,服務(wù)索引中的一個(gè)節(jié)點(diǎn)可以示出為(R2,VI,D),該三元組的含義是,針對(duì)主索引進(jìn)行“刪除”操作,并且主索引中相關(guān)聯(lián)節(jié)點(diǎn)的行ID是R2,值為VI。圖4是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的主索引和服務(wù)索引的樹形結(jié)構(gòu)的示意圖400。如圖4所示,在快速響應(yīng)模式下,索引首部可以包括主索引410,還可以包括至少一個(gè)服務(wù)索引(即服務(wù)索引一 412至服務(wù)索引N416)。服務(wù)索引的數(shù)量和類型可以基于不同需求而定制,將在下文中詳述。常規(guī)索引僅包括標(biāo)記為410的主索引(即,常規(guī)索引)部分,而并不包括后續(xù)的服務(wù)索引412至416。應(yīng)當(dāng)注意,服務(wù)索引可以采用類似于主索引的樹狀結(jié)構(gòu),不同之處在于服務(wù)索引的節(jié)點(diǎn)內(nèi)容不同于主索引。并且主索引是根據(jù)用戶對(duì)數(shù)據(jù)庫進(jìn)行的DML操作隨時(shí)更新的長(zhǎng)期存在的索引,而服務(wù)索引僅記錄針對(duì)主索引節(jié)點(diǎn)數(shù)據(jù)的變化過程數(shù)據(jù)。對(duì)于服務(wù)索引和主索引,相應(yīng)的節(jié)點(diǎn)數(shù)據(jù)可以保存在圖4的葉子節(jié)點(diǎn)中。在其他實(shí)施方式中,并不限于以圖4所示的存儲(chǔ)的方式保存主索引和至少一個(gè)服務(wù)索引,而是可以采用各種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)主索引和相對(duì)應(yīng)的至少一個(gè)服務(wù)索引,只要主索引和至少一個(gè)服務(wù)索引可以協(xié)調(diào)操作加速數(shù)據(jù)庫響應(yīng)即可。隨著時(shí)間的推移,服務(wù)索引中的節(jié)點(diǎn)相關(guān)的變化還被逐漸更新到主索引中,并且一旦服務(wù)索引中的節(jié)點(diǎn)相關(guān)的變化已經(jīng)被更新到主索引中后,則刪除該節(jié)點(diǎn)。也即,當(dāng)全部服務(wù)索引中的每個(gè)節(jié)點(diǎn)的信息均被更新到主索引之后,服務(wù)索引可以為空(例如,服務(wù)索引一 412所示,字段412下僅有一個(gè)空的根節(jié)點(diǎn)422)?;蛘叱鲇诠?jié)約資源目的考慮,還可以刪除該服務(wù)索引。例如,直接刪除服務(wù)索引一 412和根節(jié)點(diǎn)422,此時(shí)服務(wù)索引二 414直接跟隨在主索引410之后。在后續(xù)的數(shù)據(jù)操縱操作導(dǎo)致需要更新主索引時(shí),再相應(yīng)地創(chuàng)建至少一個(gè)服務(wù)索引。當(dāng)對(duì)數(shù)據(jù)庫中的表進(jìn)行插入操作導(dǎo)致需要對(duì)主索引進(jìn)行插入操作時(shí),可以在服務(wù)索引中加入標(biāo)識(shí)為“I”類型的節(jié)點(diǎn)(該節(jié)點(diǎn)中記錄與主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息,例如,行ID和值)。當(dāng)對(duì)數(shù)據(jù)庫中的表進(jìn)行刪除操作導(dǎo)致需要對(duì)主索引進(jìn)行刪除操作時(shí),可以在服務(wù)索引中加入標(biāo)識(shí)為“D”類型的節(jié)點(diǎn)。盡管僅示出了進(jìn)行插入(表示為“I”)和刪除(表示為“D”),本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,修改操作可以等效為順序執(zhí)行的刪除操作和插入操作,相應(yīng)的節(jié)點(diǎn)中操作類型可以分別記錄為“D”和“I”。也即,可以向服務(wù)節(jié)點(diǎn)的樹狀結(jié)構(gòu)中分別加入刪除節(jié)點(diǎn)和插入節(jié)點(diǎn)兩者表示修改操作。在一個(gè)實(shí)施方式中,響應(yīng)于執(zhí)行數(shù)據(jù)操縱操作,并行地更新主索引和至少一個(gè)服務(wù)索引;以及響應(yīng)于至少一個(gè)服務(wù)索引和主索引中的任一項(xiàng)被成功更新,標(biāo)記數(shù)據(jù)操縱操作結(jié)束。盡管數(shù)據(jù)庫索引可以加快數(shù)據(jù)庫對(duì)于數(shù)據(jù)操作的響應(yīng)速度,然而當(dāng)數(shù)據(jù)庫索引龐大到一定程度時(shí),對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行操作導(dǎo)致的更新數(shù)據(jù)庫索引的速度成為了影響數(shù)據(jù)庫響應(yīng)時(shí)間的瓶頸之一。本發(fā)明實(shí)施方式的方法通過創(chuàng)建用于記錄主索引中節(jié)點(diǎn)的數(shù)據(jù)變化過程的至少一個(gè)服務(wù)索引,并且將該至少一個(gè)服務(wù)索引與主索引作為整體來提供數(shù)據(jù)庫索引的功能。
在一個(gè)實(shí)施方式中,由于只要至少一個(gè)服務(wù)索引和主索引中的任一項(xiàng)被成功更新,則標(biāo)記數(shù)據(jù)操縱操作結(jié)束,這可以在一定程度上縮短更新數(shù)據(jù)庫索引的時(shí)間。盡管有可能存在主索引尚未更新完畢的情況,然而此時(shí)在至少一個(gè)服務(wù)索引的輔助下,不必等到主索引更新完畢才能標(biāo)記數(shù)據(jù)操縱操作結(jié)束。在一個(gè)實(shí)施方式中,并行地更新主索引和至少一個(gè)服務(wù)索引包括當(dāng)主索引首先被成功更新后,停止更新至少一個(gè)服務(wù)索引。在一個(gè)實(shí)施方式中,并行地更新主索引和至少一個(gè)服務(wù)索引包括當(dāng)至少一個(gè)服務(wù)索引之一首先被成功更新后,停止更新尚未被成功更新的其他服務(wù)索引;繼續(xù)更新主索引;以及當(dāng)主索引被成功更新時(shí),在被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)?,F(xiàn)在將參見圖5詳細(xì)說明并行地更新主索引和至少一個(gè)服務(wù)索引的操作流程。圖5是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的執(zhí)行數(shù)據(jù)操縱操作的方法的流程圖500。在步驟S502中,響應(yīng)于執(zhí)行數(shù)據(jù)操縱操作,并行地更新主索引和至少一個(gè)服務(wù)索引。這里的“并行地”是指,當(dāng)針對(duì)數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)操作(例如,向數(shù)據(jù)庫的表中插入數(shù)據(jù)、從中刪除數(shù)據(jù)以及更新數(shù)據(jù)庫的表中的數(shù)據(jù))導(dǎo)致需要更新主索引時(shí),在更新主索引的同時(shí)還向至少一個(gè)服務(wù)索引中插入節(jié)點(diǎn),并且該節(jié)點(diǎn)記錄主索引中節(jié)點(diǎn)的將被更新的變化。在存在多個(gè)服務(wù)索引的情況下,需要并行地向該多個(gè)服務(wù)索引中插入節(jié)點(diǎn)。在步驟S504中,響應(yīng)于至少一個(gè)服務(wù)索引和主索引中的任一項(xiàng)被成功更新,標(biāo)記數(shù)據(jù)操縱操作結(jié)束。繼而,在步驟S506中,判斷主索引是否首先被成功更新。這里的更新,指任何可以按現(xiàn)有方式對(duì)主索引進(jìn)行的更新。當(dāng)判斷結(jié)果為“是”,則操作進(jìn)入步驟S508,停止更新至少一個(gè)服務(wù)索引。本發(fā)明實(shí)施方式的方法設(shè)立服務(wù)索引的目的之一在于,在更新主索引需要更長(zhǎng)時(shí)間時(shí),利用至少一個(gè)服務(wù)索引來記錄主索引中節(jié)點(diǎn)的將被更新的變化。如果步驟S506的判斷結(jié)果為“是”,則表示對(duì)主索引的更新快于對(duì)全部服務(wù)索引的更新,此時(shí)則無需服務(wù)索引參與。繼而,操作流程結(jié)束。如果步驟S506的判斷結(jié)果為“否”,表示服務(wù)索引之一首先被更新,則操作流程前進(jìn)至步驟S510。圖5中右側(cè)分支的含義是,需要利用至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)記錄所述主索引中將被更新節(jié)點(diǎn)的變化。進(jìn)入步驟S510的先決條件是,至少一個(gè)服務(wù)索引中的一個(gè)首先被成功更新。由于此時(shí)首先被成功更新的服務(wù)索引已經(jīng)記錄了主索引中將被更新節(jié)點(diǎn)的變化,因而無需在其他服務(wù)索引中重復(fù)記錄這一變化。在步驟S510中,停止尚未被成功更新的其他服務(wù)索引。接著,在步驟S512中,繼續(xù)更新主索引,并且在步驟S514中,當(dāng)主索引被成功更新時(shí),在被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)。設(shè)置服務(wù)索引的目的在于記錄將對(duì)主索引執(zhí)行的更新,由于在步驟S514中主索引已經(jīng)更新完畢,則此時(shí)無需再保留服務(wù)索引中與該更新相關(guān)的節(jié)點(diǎn),因而應(yīng)當(dāng)在被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)。在一個(gè)實(shí)施方式中,并不僅限于以圖5所示的順序來實(shí)現(xiàn)數(shù)據(jù)操縱操作。而是還可以在發(fā)布操作結(jié)束(步驟S504)的同時(shí),由其他線程判斷是主索引還是服務(wù)索引首先被更新,并相應(yīng)地執(zhí)行如步驟S508至S514的操作。在不同實(shí)施方式中,可以采用不同機(jī)制來定義服務(wù)索引中的節(jié)點(diǎn)與針對(duì)主索引的更新之間的對(duì)應(yīng)關(guān)系。例如,當(dāng)一個(gè)服務(wù)索引首先被成功更新時(shí),更新該服務(wù)索引的線程可以向更新主索引的線程發(fā)送消息,并告知該服務(wù)索引的標(biāo)識(shí)以及被更新的節(jié)點(diǎn)的標(biāo)識(shí)(或者位置等);當(dāng)主索引更新完畢時(shí),則基于被告知的服務(wù)索引的標(biāo)識(shí)以及節(jié)點(diǎn)的標(biāo)識(shí)(或者位置),將相應(yīng)節(jié)點(diǎn)刪除或者標(biāo)記為無效。本領(lǐng)域技術(shù)人員還可以想到其他具體實(shí)施方式
,只要能夠在主索引中的被更新節(jié)點(diǎn)和服務(wù)索引中的被更新節(jié)點(diǎn)之間建立對(duì)應(yīng)關(guān)系即可。應(yīng)當(dāng)注意,每個(gè)服務(wù)索引中的節(jié)點(diǎn)的數(shù)量是動(dòng)態(tài)變化的。隨著對(duì)數(shù)據(jù)庫中的表執(zhí)行DML操作而導(dǎo)致需要更新主索引,向至少一個(gè)服務(wù)索引中加入記錄相應(yīng)更新的新的節(jié)點(diǎn);隨著如步驟S514所示的繼續(xù)更新主索引的成功完成,在被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)??梢岳斫?,當(dāng)對(duì)數(shù)據(jù)庫中的表頻繁進(jìn)行DML操作時(shí),可能會(huì)需要頻繁地更新主索引,進(jìn)而使得至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)數(shù)量增加;而當(dāng)持續(xù)一段時(shí)間無需更新主索引時(shí),由于與至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)相關(guān)聯(lián)的變化已經(jīng)被更新到主索引中,至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)數(shù)量會(huì)相應(yīng)地減少。在經(jīng)過特定時(shí)間后,還可能出現(xiàn)服務(wù)索引之一可能為空的情況。應(yīng)當(dāng)注意,盡管此時(shí)服務(wù)索引之一為空,并不意味著本發(fā)明實(shí)施方式的方法退化成為使用常規(guī)索引(對(duì)應(yīng)于本發(fā)明中的主索引)的情況。而是,當(dāng)再次出現(xiàn)需要更新主索引時(shí),可以繼續(xù)依據(jù)上文所述的方法向服務(wù)索引中增加新的節(jié)點(diǎn)。本發(fā)明實(shí)施方式并不考慮那些不涉及主索引(對(duì)應(yīng)于常規(guī)索引)操作的數(shù)據(jù)庫操作。本發(fā)明的實(shí)施方式關(guān)注于如何更高效地管理數(shù)據(jù)庫的索 弓丨,進(jìn)而通過加速數(shù)據(jù)庫索引的響應(yīng)來達(dá)到提高針對(duì)數(shù)據(jù)庫的數(shù)據(jù)操作的響應(yīng)速度。在一個(gè)實(shí)施方式中,當(dāng)執(zhí)行數(shù)據(jù)查詢操作時(shí),通過合并查詢主索引和至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果。在一個(gè)實(shí)施方式中,當(dāng)進(jìn)行數(shù)據(jù)庫查詢時(shí),主索引可能尚未完成更新,因而主索引自身并不能正確反映數(shù)據(jù)庫中的各個(gè)表的實(shí)際內(nèi)容。此時(shí),需要合并查詢主索引和至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果。至少一個(gè)服務(wù)索引記錄主索引中將被更新節(jié)點(diǎn)的變化,基于主索引和服務(wù)索引中的這些變化,可以計(jì)算得出當(dāng)前的真實(shí)數(shù)據(jù)庫內(nèi)容。在一個(gè)實(shí)施方式中,通過合并查詢主索引和至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果包括在主索引和至少一個(gè)服務(wù)索引中,基于操作類型而將具有相同節(jié)點(diǎn)信息的節(jié)點(diǎn)合成為一個(gè)節(jié)點(diǎn)。現(xiàn)在將參考圖6詳細(xì)描述,圖6是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的合并查詢主索引和服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果的過程的示意圖600。
例如圖6左上部所示,已經(jīng)創(chuàng)建了一個(gè)主索引610和多個(gè)服務(wù)索引620(包括服務(wù)索引一至服務(wù)索引N)。在查詢時(shí),可以按值-鍵搜索主索引610和服務(wù)索引620 (分別如箭頭A和箭頭B所示)。在上文所示以三元組(行ID,值,操作類型)的具體示例中,可以分別獲得主集合612和服務(wù)集合622。例如,主集合612為{(R0,V1,I),(R2,VI,I)},而服務(wù)集合 622 為{(Rl, VI, I), (R2,V1,D),(R3, VI, I), (R1,V1,D),(R1,V1,I)}。應(yīng)當(dāng)注意,與前文所述相同,這里“I”表示插入操作,而“D”表示刪除操作。在經(jīng)過并集運(yùn)算后(如箭頭C 所示),所得的結(jié)果集合 630 為{(R0,VI,I),(R2, VI, I), (Rl, VI, I), (R2,V1,D),(R3,VI,I),(R1,V1,D), (Rl, VI, I)}。由于此時(shí)服務(wù)索引中的變化信息尚未被更新至主索引中,因而需要在主索引基礎(chǔ)上結(jié)合服務(wù)索引中的節(jié)點(diǎn)信息才能得知數(shù)據(jù)庫的當(dāng)前數(shù)據(jù)。應(yīng)當(dāng)注意,在各個(gè)索引中,具有相同節(jié)點(diǎn)信息的節(jié)點(diǎn)是針對(duì)數(shù)據(jù)庫中表的相同數(shù)據(jù)項(xiàng)的操作。在此實(shí)施方式中,具有相同的行ID和相同值的三元組對(duì)應(yīng)于對(duì)相同數(shù)據(jù)項(xiàng)的操作。例如在結(jié)果集合630中,第3個(gè)三 元組(Rl,VI,I)和第6個(gè)三元組(R1,V1,D)兩者都是針對(duì)行ID為Rl、且值為Vl的數(shù)據(jù)項(xiàng)的操作。不同之處在于前者是插入操作而后者是刪除操作,這兩個(gè)操作可以合并。接著如箭頭D所示,將結(jié)果集合630按行ID和值排序,以便合并具有相同行ID和相同值的節(jié)點(diǎn),排序后的結(jié)果集合’示出為632。此時(shí),如結(jié)果集合’632左側(cè)括號(hào)所示,第I個(gè)三元組是針對(duì)第一數(shù)據(jù)項(xiàng)的操作,第2至4個(gè)三元組是針對(duì)第二數(shù)據(jù)項(xiàng)的操作,第5-6個(gè)三元組是針對(duì)第三數(shù)據(jù)項(xiàng)的操作,而最后一個(gè)三元組是針對(duì)第四數(shù)據(jù)項(xiàng)的操作。最后,如箭頭E所示,合成后的最終查詢結(jié)果640包括三個(gè)三元組,也即對(duì)應(yīng)于三個(gè)節(jié)點(diǎn){(R0,V1,I),(Rl, VI, I),(R3,VI,I)}。應(yīng)當(dāng)注意在合并操作中,針對(duì)相同節(jié)點(diǎn),“I”操作和“D”操作可以相互抵消,例如在結(jié)果集合’ 632中所示的第5-6個(gè)三元組所示的操作可以相互抵消。應(yīng)當(dāng)注意,本發(fā)明實(shí)施方式的方法在服務(wù)索引620為空時(shí)同樣適用,此時(shí)主索引610即可正確反映數(shù)據(jù)庫中的數(shù)據(jù)。當(dāng)搜索服務(wù)索引620時(shí),則返回的服務(wù)集合622也將為空,并且在主集合612和服務(wù)集合622的并集(即,結(jié)果集合630)中的數(shù)據(jù)即為查詢主索引610所得結(jié)果??梢姡景l(fā)明實(shí)施方式的方法此時(shí)也是正確有效的?;跀?shù)據(jù)庫的各個(gè)表中數(shù)據(jù)的特征,以及基于針對(duì)數(shù)據(jù)庫中的表進(jìn)行的不同類型的操作,各種類型的索引可以具有不同的操作性能。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引中可以是相同類型或者不同類型。在一個(gè)實(shí)施方式中,還可以以不同參數(shù)定義至少一個(gè)服務(wù)索引中的任一項(xiàng),以便滿足不同操作需要。應(yīng)當(dāng)注意,以不同參數(shù)定義的服務(wù)索引可以是相同類型或者不同類型的服務(wù)索引。例如,可以采用普通索弓丨,也可以采用逆向索引。例如逆向索引適用于連續(xù)數(shù)據(jù),諸如在1、2、3、4、...這種非離散的集中式插入數(shù)據(jù)的情況下可以使用逆向索引。又例如,如果在一段時(shí)間內(nèi)插入的數(shù)據(jù)是離散的,那么可以使用普通索引;如果在一定的時(shí)間段內(nèi),產(chǎn)生的數(shù)據(jù)是連續(xù)的,并需要在一個(gè)時(shí)間段內(nèi)集中地插入連續(xù)的數(shù)據(jù),則可以使用逆向索引。具體而言,對(duì)于一個(gè)銀行的數(shù)據(jù)庫系統(tǒng),在白天的工作時(shí)間,當(dāng)銀行的眾多客戶頻繁執(zhí)行存取現(xiàn)金時(shí),需要對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行大量操作。那么在短時(shí)間內(nèi)產(chǎn)生連續(xù)插入順序數(shù)據(jù)的可能性很小(這是由于多個(gè)客戶同時(shí)進(jìn)行同一類型操作的可能性較小,并且每個(gè)客戶進(jìn)行操作的具體時(shí)間也不同),此時(shí)可以使用普通索引。而數(shù)據(jù)庫管理員在夜間可能會(huì)集中進(jìn)行清算操作,并且該操作在短時(shí)間內(nèi)完成,此時(shí)可能會(huì)產(chǎn)生在短時(shí)間內(nèi)連續(xù)插入順序數(shù)據(jù)的情況,因而可以使用逆向索引。關(guān)于如何采用不同參數(shù)定義服務(wù)索引,本領(lǐng)域技術(shù)人員可以參考創(chuàng)建索引時(shí)涉及的各種參數(shù)的定義,根據(jù)具體情況實(shí)現(xiàn),在此不再贅述。上文已經(jīng)參見圖I至圖6詳細(xì)示出了根據(jù)本發(fā)明的方法的某些實(shí)施方式,現(xiàn)在將參考圖7說明如何實(shí)現(xiàn)相應(yīng)的裝置。圖7是示出根據(jù)本發(fā)明一個(gè)實(shí)施方式的用于利用服務(wù)索引管理數(shù)據(jù)庫的裝置的框圖700。在一個(gè)實(shí)施方式中,提供了一種管理數(shù)據(jù)庫索引的裝置,包括第一創(chuàng)建裝置710,被配置用于創(chuàng)建主索引;第二創(chuàng)建裝置720,被配置用于創(chuàng)建至少一個(gè)服務(wù)索引,其中至少一個(gè)服務(wù)索引用于記錄主索引中將被更新節(jié)點(diǎn)的變化;檢測(cè)裝置730,被配置用于檢測(cè)數(shù)據(jù)庫中是否出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作;索引 裝置740,被配置用于響應(yīng)于在數(shù)據(jù)庫中出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作,利用至少一個(gè)服務(wù)索引來對(duì)主索引進(jìn)行維護(hù),其中維護(hù)是基于至少一個(gè)服務(wù)索引中記錄的、主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)至少包括與主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息以及針對(duì)主索引進(jìn)行的操作類型。在一個(gè)實(shí)施方式中,索引裝置740還可以包括操縱裝置742,被配置用于在對(duì)數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)操縱操作中對(duì)主索引和服務(wù)索引中的至少一項(xiàng)進(jìn)行維護(hù);以及查詢裝置744,被配置用于在對(duì)數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)查詢操作中獲取查詢結(jié)果。在一個(gè)實(shí)施方式中,操縱裝置還包括用于響應(yīng)于執(zhí)行數(shù)據(jù)操縱操作,并行地更新主索引和至少一個(gè)服務(wù)索引的裝置;以及用于響應(yīng)于至少一個(gè)服務(wù)索引和主索引中的任一項(xiàng)被成功更新,標(biāo)記數(shù)據(jù)操縱操作結(jié)束的裝置。在一個(gè)實(shí)施方式中,用于并行地更新主索引和至少一個(gè)服務(wù)索引的裝置包括用于當(dāng)主索引首先被成功更新后,停止更新至少一個(gè)服務(wù)索引的裝置。在一個(gè)實(shí)施方式中,用于并行地更新主索引和至少一個(gè)服務(wù)索引的裝置包括用于執(zhí)行如下的裝置當(dāng)至少一個(gè)服務(wù)索引之一首先被成功更新后,停止更新尚未被成功更新的其他服務(wù)索引;繼續(xù)更新主索引;以及當(dāng)主索引被成功更新時(shí),在被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)。在一個(gè)實(shí)施方式中,查詢裝置還包括用于當(dāng)執(zhí)行數(shù)據(jù)查詢操作時(shí),通過合并查詢主索引和至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果的裝置。在一個(gè)實(shí)施方式中,用于通過合并查詢主索引和至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得查詢結(jié)果的裝置包括用于在主索引和至少一個(gè)服務(wù)索引中,基于操作類型而將具有相同節(jié)點(diǎn)信息的節(jié)點(diǎn)合成為一個(gè)節(jié)點(diǎn)的裝置。在一個(gè)實(shí)施方式中,至少一個(gè)服務(wù)索引是相同類型或者不同類型。應(yīng)當(dāng)注意,根據(jù)本發(fā)明各種實(shí)施方式的方法和裝置特別適用于在數(shù)據(jù)庫中存在大規(guī)模索引、并且針對(duì)數(shù)據(jù)庫的頻繁操作導(dǎo)致需要頻繁更新該大規(guī)模索引的情況。采用常規(guī)索引,當(dāng)針對(duì)數(shù)據(jù)庫進(jìn)行DML操作時(shí),需要等到索引被完全更新完畢時(shí)才能標(biāo)識(shí)該DML操作結(jié)束,這在時(shí)間和計(jì)算資源的利用方面都是巨大浪費(fèi)。而使用根據(jù)本發(fā)明各實(shí)施方式的方法和裝置,采用創(chuàng)建多個(gè)服務(wù)索引的方式提供了一種快速響應(yīng)的管理數(shù)據(jù)庫索引的方法。該方法可以通過提高更新數(shù)據(jù)庫索引的工作效率來提高針對(duì)數(shù)據(jù)庫的數(shù)據(jù)操作的效率。本發(fā)明可以采取硬件實(shí)施方式、軟件實(shí)施方式或既包含硬件組件又包含軟件組件的實(shí)施方式的形式。在優(yōu)選實(shí)施方式中,本發(fā)明實(shí)現(xiàn)為軟件,其包括但不限于固件、駐留軟件、微代碼等。而且,本發(fā)明還可以采取可從計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)訪問的計(jì)算機(jī)程序產(chǎn)品的形式,這些介質(zhì)提供程序代碼以供計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)使用或與其結(jié)合使用。出于描述目的,計(jì)算機(jī)可用或計(jì)算機(jī)可讀機(jī)制可以是任何有形的裝置,其可以包含、存儲(chǔ)、通信、傳播或傳輸程序以由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與其結(jié)合使用。介質(zhì)可以是電的、磁的、光的、電磁的、紅外線的、或半導(dǎo)體的系統(tǒng)(或裝置或器件)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的例子包括半導(dǎo)體或固態(tài)存 儲(chǔ)器、磁帶、可移動(dòng)計(jì)算機(jī)磁盤、隨機(jī)訪問存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、硬磁盤和光盤。目前光盤的例子包括緊湊盤-只讀存儲(chǔ)器(CD-ROM)、壓縮盤-讀/寫(CD-R/W)和DVD。適合于存儲(chǔ)/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個(gè)處理器,其直接地或通過系統(tǒng)總線間接地耦合到存儲(chǔ)器元件。存儲(chǔ)器元件可以包括在程序代碼的實(shí)際執(zhí)行期間所利用的本地存儲(chǔ)器、大容量存儲(chǔ)器、以及提供至少一部分程序代碼的臨時(shí)存儲(chǔ)以便減少執(zhí)行期間從大容量存儲(chǔ)器必須取回代碼的次數(shù)的高速緩存存儲(chǔ)器。輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點(diǎn)設(shè)備等等)可以直接地或通過中間I/o控制器耦合到系統(tǒng)。網(wǎng)絡(luò)適配器也可以耦合到系統(tǒng),以使得數(shù)據(jù)處理系統(tǒng)能夠通過中間的私有或公共網(wǎng)絡(luò)而耦合到其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備。調(diào)制解調(diào)器、線纜調(diào)制解調(diào)器以及以太網(wǎng)卡僅僅是當(dāng)前可用的網(wǎng)絡(luò)適配器類型的幾個(gè)例子。從上述描述應(yīng)當(dāng)理解,在不脫離本發(fā)明真實(shí)精神的情況下,可以對(duì)本發(fā)明各實(shí)施方式進(jìn)行修改和變更。本說明書中的描述僅僅是用于說明性的,而不應(yīng)被認(rèn)為是限制性的。本發(fā)明的范圍僅受所附權(quán)利要求書的限制。
權(quán)利要求
1.ー種管理數(shù)據(jù)庫索引的方法,包括 創(chuàng)建主索引; 創(chuàng)建至少ー個(gè)服務(wù)索引,其中所述至少一個(gè)服務(wù)索引用于記錄所述主索引中將被更新節(jié)點(diǎn)的變化; 檢測(cè)所述數(shù)據(jù)庫中是否出現(xiàn)涉及所述主索引的、針對(duì)所述數(shù)據(jù)庫執(zhí)行的操作; 響應(yīng)于在所述數(shù)據(jù)庫中出現(xiàn)涉及所述主索引的、針對(duì)所述數(shù)據(jù)庫執(zhí)行的操作,利用所述至少一個(gè)服務(wù)索引來對(duì)所述主索引進(jìn)行維護(hù),其中所述維護(hù)是基于所述至少一個(gè)服務(wù)索引中記錄的、所述主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的。
2.根據(jù)權(quán)利要求I所述的方法,其中所述至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)至少包括與所述主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息以及針對(duì)所述主索引進(jìn)行的操作類型。
3.根據(jù)權(quán)利要求I或2所述的方法,其中針對(duì)所述數(shù)據(jù)庫執(zhí)行的操作包括針對(duì)所述數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)操縱操作和數(shù)據(jù)查詢操作中的至少ー個(gè)。
4.根據(jù)權(quán)利要求3所述的方法,其中 響應(yīng)于執(zhí)行所述數(shù)據(jù)操縱操作,并行地更新所述主索引和所述至少一個(gè)服務(wù)索引;以及 響應(yīng)于所述至少一個(gè)服務(wù)索引和所述主索引中的任ー項(xiàng)被成功更新,標(biāo)記所述數(shù)據(jù)操縱操作結(jié)束。
5.根據(jù)權(quán)利要求4所述的方法,其中所述并行地更新所述主索引和所述至少一個(gè)服務(wù)索引包括 當(dāng)所述主索引首先被成功更新后,停止更新所述至少一個(gè)服務(wù)索引。
6.根據(jù)權(quán)利要求4所述的方法,其中所述并行地更新所述主索引和所述至少一個(gè)服務(wù)索引包括 當(dāng)所述至少一個(gè)服務(wù)索引之一首先被成功更新后, 停止更新尚未被成功更新的其他服務(wù)索引; 繼續(xù)更新所述主索引;以及 當(dāng)所述主索引被成功更新時(shí),在所述被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)。
7.根據(jù)權(quán)利要求3所述的方法,其中當(dāng)執(zhí)行所述數(shù)據(jù)查詢操作時(shí),通過合并查詢所述主索引和所述至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得所述查詢結(jié)果。
8.根據(jù)權(quán)利要求7所述的方法,其中所述通過合并查詢所述主索引和所述至少ー個(gè)服務(wù)索引所得的結(jié)果集合以獲得所述查詢結(jié)果包括 在所述主索引和所述至少一個(gè)服務(wù)索引中,基于操作類型而將具有相同節(jié)點(diǎn)信息的節(jié)點(diǎn)合成為ー個(gè)節(jié)點(diǎn)。
9.ー種管理數(shù)據(jù)庫索引的裝置,包括 第一創(chuàng)建裝置,被配置用于創(chuàng)建主索引; 第二創(chuàng)建裝置,被配置用于創(chuàng)建至少ー個(gè)服務(wù)索引,其中所述至少一個(gè)服務(wù)索引用于記錄所述主索引中將被更新節(jié)點(diǎn)的變化; 檢測(cè)裝置,被配置用于檢測(cè)所述數(shù)據(jù)庫中是否出現(xiàn)涉及所述主索引的、針對(duì)所述數(shù)據(jù)庫執(zhí)行的操作;索引裝置,被配置用于響應(yīng)于在所述數(shù)據(jù)庫中出現(xiàn)涉及所述主索引的、針對(duì)所述數(shù)據(jù)庫執(zhí)行的操作,利用所述至少一個(gè)服務(wù)索引來對(duì)所述主索引進(jìn)行維護(hù),其中所述維護(hù)是基于所述至少ー個(gè)服務(wù)索引中記錄的、所述主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的。
10.根據(jù)權(quán)利要求9所述的裝置,其中所述至少一個(gè)服務(wù)索引中的節(jié)點(diǎn)至少包括與所述主索引的節(jié)點(diǎn)相關(guān)聯(lián)的節(jié)點(diǎn)信息以及針對(duì)所述主索引進(jìn)行的操作類型。
11.根據(jù)權(quán)利要求9或10所述的裝置,其中所述索引裝置包括以下至少ー個(gè) 操縱裝置,被配置用于在對(duì)所述數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)操縱操作中對(duì)所述主索引和所述服務(wù)索引中的至少ー項(xiàng)進(jìn)行維護(hù);以及 查詢裝置,被配置用于在對(duì)所述數(shù)據(jù)庫執(zhí)行的數(shù)據(jù)查詢操作中獲取查詢結(jié)果。
12.根據(jù)權(quán)利要求11所述的裝置,其中所述操縱裝置包括 用于響應(yīng)于執(zhí)行所述數(shù)據(jù)操縱操作,并行地更新所述主索引和所述至少一個(gè)服務(wù)索引的裝置;以及 用于響應(yīng)于所述至少ー個(gè)服務(wù)索引和所述主索引中的任ー項(xiàng)被成功更新,標(biāo)記所述數(shù)據(jù)操縱操作結(jié)束的裝置。
13.根據(jù)權(quán)利要求12所述的裝置,其中用于所述并行地更新所述主索引和所述至少一個(gè)服務(wù)索引的裝置包括 用于當(dāng)所述主索引首先被成功更新后,停止更新所述至少一個(gè)服務(wù)索引的裝置。
14.根據(jù)權(quán)利要求12所述的裝置,其中用于所述并行地更新所述主索引和所述至少一個(gè)服務(wù)索引的裝置包括用于執(zhí)行如下的裝置 當(dāng)所述至少一個(gè)服務(wù)索引之一首先被成功更新后, 停止更新尚未被成功更新的其他服務(wù)索引; 繼續(xù)更新所述主索引;以及 當(dāng)所述主索引被成功更新時(shí),在所述被成功更新的服務(wù)索引中刪除先前被成功更新的節(jié)點(diǎn)。
15.根據(jù)權(quán)利要求11所述的裝置,所述查詢裝置包括用于當(dāng)執(zhí)行所述數(shù)據(jù)查詢操作時(shí),通過合并查詢所述主索引和所述至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得所述查詢結(jié)果的裝置。
16.根據(jù)權(quán)利要求15所述的裝置,其中用于所述通過合并查詢所述主索引和所述至少一個(gè)服務(wù)索引所得的結(jié)果集合以獲得所述查詢結(jié)果的裝置包括 用于在所述主索引和所述至少一個(gè)服務(wù)索引中,基于操作類型而將具有相同節(jié)點(diǎn)信息的節(jié)點(diǎn)合成為ー個(gè)節(jié)點(diǎn)的裝置。
全文摘要
本發(fā)明的各實(shí)施方式涉及一種管理數(shù)據(jù)庫索引的方法和裝置。在一個(gè)實(shí)施方式中,提供了一種管理數(shù)據(jù)庫索引的方法,包括創(chuàng)建主索引;創(chuàng)建至少一個(gè)服務(wù)索引,其中至少一個(gè)服務(wù)索引用于記錄主索引中將被更新節(jié)點(diǎn)的變化;檢測(cè)數(shù)據(jù)庫中是否出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作;當(dāng)在數(shù)據(jù)庫中出現(xiàn)涉及主索引的、針對(duì)數(shù)據(jù)庫執(zhí)行的操作時(shí),利用至少一個(gè)服務(wù)索引來對(duì)主索引進(jìn)行維護(hù),其中維護(hù)是基于至少一個(gè)服務(wù)索引中記錄的、主索引中將被更新節(jié)點(diǎn)的變化進(jìn)行的。在其他實(shí)施方式中,還提供了管理數(shù)據(jù)庫索引的相應(yīng)裝置。
文檔編號(hào)G06F17/30GK102651007SQ20111005157
公開日2012年8月29日 申請(qǐng)日期2011年2月28日 優(yōu)先權(quán)日2011年2月28日
發(fā)明者張凱, 鄒獻(xiàn), 霍嘉, 高英明 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司