專利名稱::查詢數(shù)據(jù)的系統(tǒng)、方法和數(shù)據(jù)管理系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本申請公開的內(nèi)容涉及查詢數(shù)據(jù)的系統(tǒng)、方法和數(shù)據(jù)管理系統(tǒng)。本申請公開的內(nèi)容還涉及一種為數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)索引的方法。
背景技術(shù):
:在數(shù)據(jù)庫系統(tǒng)中,索引對于改善數(shù)據(jù)查詢速度有著舉足輕重的作用,充分使用索引可以改善數(shù)據(jù)庫應(yīng)用程序的性能。從索引的物理形式上看,數(shù)據(jù)庫的索引分為集群索引(ClusterIndex)和非集群索引(NonclusterIndex)兩種,區(qū)別在于數(shù)據(jù)按照集群索引有序存放,而非集群索引一般不與數(shù)據(jù)存儲在一起,數(shù)據(jù)也不會按照非集群索引排序。一般地,集群索引被稱為數(shù)據(jù)庫主索引(PrimaryIndex),被索引屬性稱為主鍵(PrimaryKey),非集群索引被稱作次索引Secondaryhdex)。當(dāng)對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢或者按非主鍵的列排序或統(tǒng)計時,需要先掃描次索引以找到與次索引關(guān)聯(lián)的數(shù)據(jù),然后在找到的數(shù)據(jù)中根據(jù)主索引確定要操作的數(shù)據(jù)。這樣,會不停地讀取磁盤不同位置的文件,磁頭需要多次移動來完成對數(shù)據(jù)排序、統(tǒng)計等操作,所需要處理時間長。目前解決此類問題的方式是使用物化視圖將用戶的查詢指令生成新表,表中包括查詢指令和數(shù)據(jù),對用戶常用的查詢指令,用戶直接調(diào)用該物化視圖即可。然而,上述物化視圖的方式更新成本高、查詢性能低。
發(fā)明內(nèi)容本申請的公開了一種數(shù)據(jù)索引系統(tǒng),其可包括存儲媒介,存儲有多個數(shù)據(jù)、以及為所述多個數(shù)據(jù)創(chuàng)建并與之綁定的次索引;索引元數(shù)據(jù)管理模塊,用于管理從存儲于數(shù)據(jù)庫的基表數(shù)據(jù)中獲取索引元數(shù)據(jù),其中,所述索引元數(shù)據(jù)用于根據(jù)預(yù)定規(guī)則創(chuàng)建所述多個數(shù)據(jù);以及索引數(shù)據(jù)管理模塊,用于根據(jù)從用戶端接收的操作指令,通過綁定的所述次索引在所述存儲媒介中查詢到要操作的數(shù)據(jù)。本申請還公開了一種數(shù)據(jù)管理系統(tǒng),其可包括第一數(shù)據(jù)查詢子系統(tǒng);以及第二數(shù)據(jù)查詢子系統(tǒng),所述第二數(shù)據(jù)查詢子系統(tǒng)包括上述的數(shù)據(jù)索引系統(tǒng);其中,所述數(shù)據(jù)索引系統(tǒng)中的判定模塊從用戶端接收操作指令,并判定是否要在所述數(shù)據(jù)索引系統(tǒng)中通過綁定的所述次索引執(zhí)行所述操作指令,當(dāng)判定的結(jié)果為是時,所述數(shù)據(jù)索引系統(tǒng)中的索引數(shù)據(jù)管理模塊通過綁定的所述次索引查詢所述操作指令要執(zhí)行操作的數(shù)據(jù),否則所述判定模塊觸發(fā)所述第一數(shù)據(jù)查詢子系統(tǒng)以通過所述基表數(shù)據(jù)具有的次索引找到與該次索引關(guān)聯(lián)的基表數(shù)據(jù),然后在找到的基表數(shù)據(jù)中根據(jù)所述基表數(shù)據(jù)具有的主索引確定要操作的數(shù)據(jù)。本申請還公開了一種查詢數(shù)據(jù)的方法,所述方法可包括從用戶端接收數(shù)據(jù)操作指令;確定是否要通過綁定的次索引執(zhí)行所述數(shù)據(jù)操作指令,其中,所述綁定的次索引與多個數(shù)據(jù)相互綁定,所述多個數(shù)據(jù)根據(jù)預(yù)定規(guī)則從數(shù)據(jù)庫的基表數(shù)據(jù)中創(chuàng)建;以及如果確定的結(jié)果為是,則通過所述綁定的次索引在綁定的多個數(shù)據(jù)中查詢所述數(shù)據(jù)操作指令要執(zhí)行操作的數(shù)據(jù)。此外,本申請還公開了一種為數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)索引的方法。該方法可包括根據(jù)預(yù)定規(guī)則從所述數(shù)據(jù)庫中的基表數(shù)據(jù)中創(chuàng)建要綁定的多個數(shù)據(jù);為所述多個數(shù)據(jù)創(chuàng)建次索引;將所述多個數(shù)據(jù)和所述次索引綁定;以及將所述綁定的多個數(shù)據(jù)和次索引在物理上獨立于所述數(shù)據(jù)庫中的基表數(shù)據(jù)相鄰存儲。圖1顯示了根據(jù)本申請一個實施方式的查詢數(shù)據(jù)的方法的流程圖;圖2顯示了根據(jù)本申請一個實施方式的用于建立擴(kuò)展的次索引結(jié)構(gòu)的具體處理流程圖;圖3顯示了根據(jù)本申請一個實施方式的更新擴(kuò)展的次索引結(jié)構(gòu)的具體處理流程圖;圖4顯示了根據(jù)本申請一個實施方式的數(shù)據(jù)索引系統(tǒng)的方框圖;以及圖5顯示了根據(jù)本申請一個實施方式的數(shù)據(jù)管理系統(tǒng)的方框圖。具體實施例方式下面將參照附圖描述本申請的具體實施方式。圖1顯示了根據(jù)本申請一個實施方式的查詢數(shù)據(jù)的方法100。如圖1所示,在步驟SlOl中從用戶端接收數(shù)據(jù)操作指令,數(shù)據(jù)操作指令可例如是查詢數(shù)據(jù)、創(chuàng)建數(shù)據(jù)、或更新數(shù)據(jù)等的指令。接著,在步驟S102中確定是否要通過擴(kuò)展的次索引結(jié)構(gòu)執(zhí)行數(shù)據(jù)操作指令。擴(kuò)展的次索引結(jié)構(gòu)包括與數(shù)據(jù)庫中的元數(shù)據(jù)關(guān)聯(lián)的多個數(shù)據(jù)以及與所述多個數(shù)據(jù)綁定的次索引。為了便于理解,在具體描述步驟S102之前,首先參照圖2描述根據(jù)本申請的用于建立擴(kuò)展的次索引結(jié)構(gòu)的具體處理。如圖2所示,在步驟S201中,根據(jù)應(yīng)用的需要和預(yù)定規(guī)則從數(shù)據(jù)庫中的基表數(shù)據(jù)中創(chuàng)建要被綁定的多個數(shù)據(jù)。根據(jù)本發(fā)明的一個實施方式,要被綁定的數(shù)據(jù)例如是通過對用戶經(jīng)常進(jìn)行的操作(如對于數(shù)據(jù)庫的特定表中的特定列的查詢、統(tǒng)計等)而形成的數(shù)據(jù)。具體地,要被綁定的數(shù)據(jù)例如包括直方圖(Histogram),即次索引所在的列(以下簡稱為“索引列”)在數(shù)據(jù)庫中的出現(xiàn)次數(shù);不同于索引列的其它數(shù)據(jù)列,例如,在WAP訪問日志表中,IP地址是次索引,則其它數(shù)據(jù)列通??梢允且c該IP地址綁定的用戶號碼和機(jī)型;·不同于索引列的其它數(shù)據(jù)列的函數(shù)值,例如,與次索引綁定的用戶號碼的前5位數(shù);·其它數(shù)據(jù)列和次索引列的函數(shù)值。例如,當(dāng)單價為次索引列時,與該索引綁定的成本與單價的比值。其中,數(shù)據(jù)庫中用于創(chuàng)建要被綁定的數(shù)據(jù)的基表數(shù)據(jù)被稱為“索引元數(shù)據(jù)”并被單獨保存。關(guān)于索引元數(shù)據(jù)的作用將在后面進(jìn)行描述。接著,在步驟S202中為要綁定的多個數(shù)據(jù)創(chuàng)建次索引。關(guān)于次索引的定義可參見本申請
背景技術(shù):
部分的描述。可以使用與結(jié)構(gòu)化查詢語言(SQL)規(guī)范相近的語句創(chuàng)建次索弓丨。例如可以采用指令CREATEINDEXIdx_NameONTABEL(tablename[預(yù)處理方法IAs被綁定數(shù)據(jù)1數(shù)據(jù)類型,預(yù)處理方法2As被綁定數(shù)據(jù)2數(shù)據(jù)類型,...,預(yù)處理方法NAs被綁定數(shù)據(jù)N數(shù)據(jù)類型])來創(chuàng)建次索引。根據(jù)本申請的一個實施方式,還可使用與SQL規(guī)范相近的語句對創(chuàng)建的次索引進(jìn)行刪除或更新。具體地,刪除擴(kuò)展的次級索引中的次索引的指令為DropIndexIdx_Name,更新擴(kuò)展的次級索引中次索引的指令可例如為AlterIndexIdx_NameAdd[預(yù)處理方法IAs被綁定數(shù)據(jù)1數(shù)據(jù)類型,···]AlterIndexIdx_Namedrop[被綁定數(shù)據(jù)1,···]^AlterIndexIdx_Namemodify[預(yù)處理方法IAs被綁定數(shù)據(jù)1數(shù)據(jù)類型,...]。接著,在步驟S203中將創(chuàng)建的數(shù)據(jù)和次索引綁定以形成擴(kuò)展的次索引結(jié)構(gòu)。擴(kuò)展的次索引結(jié)構(gòu)中可以將每個記錄表示為元組(Tuple):(索引列,被綁定數(shù)據(jù)1,被綁定數(shù)據(jù)2...)。在由擴(kuò)展的次索引結(jié)構(gòu)確定的一個數(shù)據(jù)表中可以根據(jù)應(yīng)用包括多個次索引。擴(kuò)展的次索引結(jié)構(gòu)可例如表1所示。IndexedCol被綁定數(shù)據(jù)1被綁定數(shù)據(jù)2...被綁定數(shù)據(jù)NA預(yù)處理結(jié)果1預(yù)處理結(jié)果2··預(yù)處理結(jié)果NB預(yù)處理結(jié)果1預(yù)處理結(jié)果2··預(yù)處理結(jié)果NC預(yù)處理結(jié)果1預(yù)處理結(jié)果2預(yù)處理結(jié)果N‘·預(yù)處理結(jié)果1預(yù)處理結(jié)果2預(yù)處理結(jié)果N表1如表1所示,擴(kuò)展的次索引結(jié)構(gòu)中例如記錄如下信息1.索引名稱例如可以命名上表1中次索引“IndexedCol”名稱為“DBI-1”;2.索引列例如在表1中名稱為‘IndexedCol”標(biāo)志的列“A、B、C.··,,;3.被綁定的數(shù)據(jù),即在步驟S201中創(chuàng)建的數(shù)據(jù)。此外,還可使用索引元數(shù)據(jù)列表保存上述擴(kuò)展的次索引的描述信息。擴(kuò)展的次索引的描述信息可以抽象的表述如下DBI-I索引列,(綁定數(shù)據(jù)1,綁定數(shù)據(jù)2.··),(公式1,公式2.··)DBI-2…其中,索引列為擴(kuò)展的次索引中二級索引的創(chuàng)建列,綁定數(shù)據(jù)和公式表示數(shù)據(jù)表上被綁定數(shù)據(jù)的信息。根據(jù)本申請的一個實施方式,為了加快判定某次更新是否涉及到擴(kuò)展的次索引,還可以將所有綁定數(shù)據(jù)進(jìn)一步通過另外一種視圖表示,如下權(quán)利要求1.一種數(shù)據(jù)索引系統(tǒng),包括存儲媒介,存儲有多個數(shù)據(jù)、以及為所述多個數(shù)據(jù)創(chuàng)建并與之綁定的次索引;索引元數(shù)據(jù)管理模塊,用于管理從存儲于數(shù)據(jù)庫的基表數(shù)據(jù)中獲取索引元數(shù)據(jù),其中,所述索引元數(shù)據(jù)用于根據(jù)預(yù)定規(guī)則創(chuàng)建所述多個數(shù)據(jù);以及索引數(shù)據(jù)管理模塊,用于根據(jù)從用戶端接收的操作指令,通過綁定的所述次索引在所述存儲媒介中查詢到要操作的數(shù)據(jù)。2.如權(quán)利要求1所述的系統(tǒng),其中,所述預(yù)定規(guī)則被設(shè)置為使得所創(chuàng)建的多個數(shù)據(jù)包括以下數(shù)據(jù)中的至少一個所述次索引所在的數(shù)據(jù)列在所述數(shù)據(jù)庫中出現(xiàn)的次數(shù)、所述數(shù)據(jù)庫中與所述次索引不同的其它數(shù)據(jù)列、所述其它數(shù)據(jù)列對應(yīng)的數(shù)值、以及所述其它數(shù)據(jù)列和所述次索引列的函數(shù)值。3.如權(quán)利要求1所述的系統(tǒng),還包括判定模塊,用于判定所用操作指令的類型,以選擇性地將所述操作指令發(fā)送到所述索引元數(shù)據(jù)管理模塊或所述索引數(shù)據(jù)管理模塊。4.如權(quán)利要求3所述的系統(tǒng),所述判定模塊進(jìn)一步被配置為判定是否要通過綁定的所述次索引在所述存儲媒介中執(zhí)行所述操作指令。5.如權(quán)利要求3所述的系統(tǒng),其中,當(dāng)所述操作指令中包括被綁定的次索引,而且未包括在所述數(shù)據(jù)庫的基表中設(shè)置的主索引時,所述判定模塊判定要通過綁定的所述次索引在所述存儲媒介中執(zhí)行所述數(shù)據(jù)操作指令。6.如權(quán)利要求5所述的系統(tǒng),其中,當(dāng)通過綁定的所述次索引執(zhí)行所述數(shù)據(jù)操作指令的查詢成本與使用所述數(shù)據(jù)庫中的主索引和次索引查詢相比成本更低,所述判定模塊則判定要通過綁定的所述次索引在所述存儲媒介中執(zhí)行所述數(shù)據(jù)操作指令。7.如權(quán)利要求1所述的系統(tǒng),其中,所述索引數(shù)據(jù)管理模塊還被配置為將綁定的所述次索引和數(shù)據(jù)加載到內(nèi)存或緩沖進(jìn)行操作。8.如權(quán)利要求1所述的系統(tǒng),其中,當(dāng)所述索引元數(shù)據(jù)發(fā)生更新時,所述索引元數(shù)據(jù)管理模塊觸發(fā)所述索引數(shù)據(jù)管理模塊對綁定的所述數(shù)據(jù)或次索引進(jìn)行相應(yīng)的更新。9.如權(quán)利要求8所述的系統(tǒng),所述索引元數(shù)據(jù)管理模塊從所述索引元數(shù)據(jù)中確定當(dāng)前發(fā)生的更新是否與綁定的所述次索引和數(shù)據(jù)有關(guān),如果有關(guān),則觸發(fā)所述索引數(shù)據(jù)管理模塊根據(jù)所述當(dāng)前發(fā)生更新的索引元數(shù)據(jù)的取值,通過所述預(yù)定規(guī)則計算被綁定的數(shù)據(jù)的更新結(jié)果,并以該更新結(jié)果對其進(jìn)行更新。10.一種數(shù)據(jù)管理系統(tǒng),包括第一數(shù)據(jù)查詢子系統(tǒng);以及第二數(shù)據(jù)查詢子系統(tǒng),所述第二數(shù)據(jù)查詢子系統(tǒng)包括如權(quán)利要求1-9中任意一項所述的數(shù)據(jù)索引系統(tǒng);其中,所述數(shù)據(jù)索引系統(tǒng)中的判定模塊從用戶端接收操作指令,并判定是否要在所述數(shù)據(jù)索引系統(tǒng)中通過綁定的所述次索引執(zhí)行所述操作指令,當(dāng)判定的結(jié)果為是時,所述數(shù)據(jù)索引系統(tǒng)中的索引數(shù)據(jù)管理模塊通過綁定的所述次索引查詢所述操作指令要執(zhí)行操作的數(shù)據(jù),否則所述判定模塊觸發(fā)所述第一數(shù)據(jù)查詢子系統(tǒng)以通過所述基表數(shù)據(jù)具有的次索引找到與該次索引關(guān)聯(lián)的基表數(shù)據(jù),然后在找到的基表數(shù)據(jù)中根據(jù)所述基表數(shù)據(jù)具有的主索引確定要操作的數(shù)據(jù)。11.一種查詢數(shù)據(jù)的方法,所述方法包括從用戶端接收數(shù)據(jù)操作指令;確定是否要通過綁定的次索引執(zhí)行所述數(shù)據(jù)操作指令,其中,所述綁定的次索引與多個數(shù)據(jù)相互綁定,所述多個數(shù)據(jù)根據(jù)預(yù)定規(guī)則從數(shù)據(jù)庫的基表數(shù)據(jù)中創(chuàng)建;以及如果確定的結(jié)果為是,則通過所述綁定的次索引在綁定的多個數(shù)據(jù)中查詢所述數(shù)據(jù)操作指令要執(zhí)行操作的數(shù)據(jù)。12.如權(quán)利要求11所述的方法,其中,所述預(yù)定規(guī)則被設(shè)置為使得所創(chuàng)建的多個數(shù)據(jù)包括以下數(shù)據(jù)中的至少一個所述次索引所在的數(shù)據(jù)列在數(shù)據(jù)庫中出現(xiàn)的次數(shù)、所述數(shù)據(jù)庫中與所述次索引不同的其它數(shù)據(jù)列、所述其它數(shù)據(jù)列對應(yīng)的數(shù)值,所述其它數(shù)據(jù)列和所述次索引列的函數(shù)值。13.如權(quán)利要求11所述的方法,其中,通過綁定的所述次索引在綁定的多個數(shù)據(jù)中查詢所述數(shù)據(jù)操作指令要執(zhí)行操作的數(shù)據(jù)的步驟還包括通過所述次索引確定所述數(shù)據(jù)操作指令要執(zhí)行操作的數(shù)據(jù);以及將所述次索引和所確定的數(shù)據(jù)加載到內(nèi)存或緩沖。14.如權(quán)利要求11所述的方法,其中,當(dāng)數(shù)據(jù)庫中的基表數(shù)據(jù)更新時,所述方法還包括根據(jù)更新的基表數(shù)據(jù)的取值,通過所述預(yù)定規(guī)則計算出所述被綁定的數(shù)據(jù)的更新結(jié)果,并以該更新結(jié)果對所述被綁定的數(shù)據(jù)進(jìn)行更新。15.如權(quán)利要求11所述的方法,其中,所述數(shù)據(jù)庫中的基表數(shù)據(jù)具有主索引和次索引,所述方法還包括如果確定的結(jié)果是不通過所述綁定的次索引執(zhí)行所述數(shù)據(jù)操作指令,則通過所述基表數(shù)據(jù)的次索引在所述數(shù)據(jù)庫的基表中找到與該次索引關(guān)聯(lián)的基表數(shù)據(jù),然后在找到的基表數(shù)據(jù)中,根據(jù)基表數(shù)據(jù)的主索引確定要操作的數(shù)據(jù)。16.如權(quán)利要求15所述的方法,其中,當(dāng)所述操作指令中包括被綁定的次索引,而且未包括所述主索引時,確定要通過所述綁定的次索引執(zhí)行所述數(shù)據(jù)操作指令。17.如權(quán)利要求15所述的方法,其中,當(dāng)通過所述綁定的次索引執(zhí)行所述數(shù)據(jù)操作指令的查詢成本與使用所述基表數(shù)據(jù)的主索引和次索引查詢相比成本更低,則確定要通過所述綁定的次索引執(zhí)行所述數(shù)據(jù)操作指令。18.一種為數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)索引的方法,包括根據(jù)預(yù)定規(guī)則從所述數(shù)據(jù)庫中的基表數(shù)據(jù)中創(chuàng)建要綁定的多個數(shù)據(jù);為所述多個數(shù)據(jù)創(chuàng)建次索引;將所述多個數(shù)據(jù)和所述次索引綁定;以及將所述綁定的多個數(shù)據(jù)和次索引在物理上獨立于所述數(shù)據(jù)庫中的基表數(shù)據(jù)相鄰存儲。19.如權(quán)利要求18所述的方法,其中,所述預(yù)定規(guī)則被設(shè)置為使得所創(chuàng)建的多個數(shù)據(jù)包括所述次索引所在的數(shù)據(jù)列在所述數(shù)據(jù)庫中出現(xiàn)的次數(shù)、與所述次索引不同的其它數(shù)據(jù)列、所述其它數(shù)據(jù)列對應(yīng)的數(shù)值,所述其它數(shù)據(jù)列和所述次索引列的函數(shù)值。全文摘要本發(fā)明公開了查詢數(shù)據(jù)的系統(tǒng)、方法和數(shù)據(jù)管理系統(tǒng)。所述查詢數(shù)據(jù)的系統(tǒng)包括存儲媒介,存儲有多個數(shù)據(jù)、以及為所述多個數(shù)據(jù)創(chuàng)建并與之綁定的次索引;索引元數(shù)據(jù)管理模塊,用于管理從存儲于數(shù)據(jù)庫的基表數(shù)據(jù)中獲取索引元數(shù)據(jù),其中,所述索引元數(shù)據(jù)用于根據(jù)預(yù)定規(guī)則創(chuàng)建所述多個數(shù)據(jù);以及索引數(shù)據(jù)管理模塊,用于根據(jù)從用戶端接收的操作指令,通過綁定的所述次索引在所述存儲媒介中查詢到要操作的數(shù)據(jù)。文檔編號G06F17/30GK102117305SQ20101000016公開日2011年7月6日申請日期2010年1月6日優(yōu)先權(quán)日2010年1月6日發(fā)明者孫少陵,羅治國,錢嶺,齊驥申請人:中國移動通信集團(tuán)公司