一種自適應(yīng)索引的方法和裝置制造方法
【專利摘要】本發(fā)明公開(kāi)了一種自適應(yīng)索引的方法和裝置,屬于數(shù)據(jù)庫(kù)【技術(shù)領(lǐng)域】。所述方法包括:接收攜帶有范圍查詢條件的查詢請(qǐng)求;根據(jù)所述范圍查詢條件,獲取所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊;在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù)設(shè)的代價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序;根據(jù)經(jīng)過(guò)排序的第一結(jié)果數(shù)據(jù)塊,以及未經(jīng)排序的第一結(jié)果數(shù)據(jù)塊,對(duì)結(jié)果數(shù)據(jù)塊集合進(jìn)行更新,并更新所述結(jié)果數(shù)據(jù)塊集合的索引。采用本發(fā)明,可以在降低數(shù)據(jù)庫(kù)前期查詢過(guò)程中的資源耗費(fèi)的同時(shí),提高數(shù)據(jù)庫(kù)的收斂速度。
【專利說(shuō)明】一種自適應(yīng)索引的方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)庫(kù)【技術(shù)領(lǐng)域】,特別涉及一種自適應(yīng)索引的方法和裝置。
【背景技術(shù)】
[0002] 隨著數(shù)據(jù)庫(kù)技術(shù)的不斷發(fā)展,自適應(yīng)索引技術(shù)得到了廣泛的應(yīng)用。自適應(yīng)索引技 術(shù)是在數(shù)據(jù)庫(kù)中,通過(guò)查詢過(guò)程建立索引,并通過(guò)不斷的查詢過(guò)程不斷的更新完善索引,以 提高查詢效率的技術(shù)。數(shù)據(jù)庫(kù)中查詢的類型可以包括范圍數(shù)據(jù)查詢、模糊數(shù)據(jù)查詢等,一般 在自適應(yīng)索引技術(shù)中,索引是在范圍數(shù)據(jù)查詢的過(guò)程中建立并完善的。
[0003] 文章 Merging Whatj s Cracked, Cracking Whatj s Merged:adaptive indexing in main memory column-stores, VLDB, 2011 提出的 HCCXHyper Crack Crack,快速分裂)算 法是一種自適應(yīng)索引技術(shù)?;贖CC算法,在建立數(shù)據(jù)庫(kù)初期,會(huì)按預(yù)先制定的規(guī)則將數(shù)據(jù) 劃分為多個(gè)初始數(shù)據(jù)塊,組成初始數(shù)據(jù)塊集合。當(dāng)接收到攜帶范圍查詢條件的查詢請(qǐng)求時(shí), 采用crack (分裂)法進(jìn)行查詢,把符合范圍查詢條件的數(shù)據(jù)從相應(yīng)的初始數(shù)據(jù)塊中提出, 同時(shí)對(duì)該初始數(shù)據(jù)塊中剩余的數(shù)據(jù)行分裂處理,即將大于范圍查詢條件的數(shù)據(jù)和小于范圍 查詢條件的數(shù)據(jù)分別放在不同的數(shù)據(jù)塊中,得到兩個(gè)新的初始數(shù)據(jù)塊。然后將crack法查 詢到的各初始數(shù)據(jù)塊中的符合范圍查詢條件的數(shù)據(jù)合并成一個(gè)結(jié)果數(shù)據(jù)塊,每次查詢的結(jié) 果數(shù)據(jù)塊組成結(jié)果數(shù)據(jù)塊集合。對(duì)結(jié)果數(shù)據(jù)塊集合中的結(jié)果數(shù)據(jù)塊建立有索引,如AVL樹(shù) (一種二叉樹(shù),以提出者的名字縮寫命名)等,在索引中可以記錄每個(gè)結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范 圍。后續(xù)的查詢過(guò)程中,可以在結(jié)果數(shù)據(jù)塊集合和初始數(shù)據(jù)塊集合中分別進(jìn)行查詢,在結(jié)果 數(shù)據(jù)塊集合中進(jìn)行范圍查詢時(shí)也采用crack法查詢。
[0004] 文章 Merging What,s Cracked, Cracking What,s Merged:adaptive indexing in main memory column-stores, VLDB, 2011 提出的 HCS (Hyper Crack Sort,快速分裂排 序)算法也是一種自適應(yīng)索引技術(shù)。與HCC技術(shù)類似,在建立數(shù)據(jù)庫(kù)初期,會(huì)按預(yù)先制定的 規(guī)則將數(shù)據(jù)劃分為多個(gè)初始數(shù)據(jù)塊,組成初始數(shù)據(jù)塊集合。在HCS算法中,同樣采用crack 法在初始數(shù)據(jù)塊集合中進(jìn)行查詢,然后將crack法查詢到的數(shù)據(jù)合并成一個(gè)結(jié)果數(shù)據(jù)塊, 不同的是,HCS算法中,先對(duì)查詢到的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序,再放入結(jié)果數(shù)據(jù)塊集 合中。后續(xù)的查詢過(guò)程中,可以在結(jié)果數(shù)據(jù)塊集合和初始數(shù)據(jù)塊集合中分別進(jìn)行查詢,HCS 算法中,因?yàn)榻Y(jié)果數(shù)據(jù)塊中數(shù)據(jù)有序,所以在結(jié)果數(shù)據(jù)塊集合中進(jìn)行查詢時(shí),可以采用折半 法進(jìn)行查詢。
[0005] 在HCC算法和HCS算法中,可以根據(jù)查詢得到的結(jié)果數(shù)據(jù)塊,對(duì)結(jié)果數(shù)據(jù)塊集合進(jìn) 行更新,具體的,如果結(jié)果數(shù)據(jù)塊集合中未包含某查詢得到的結(jié)果數(shù)據(jù)塊的數(shù)據(jù),則將該結(jié) 果數(shù)據(jù)塊添加到結(jié)果數(shù)據(jù)塊集合中。這樣,基于HCC算法和HCS算法,隨著數(shù)據(jù)庫(kù)不斷被使 用,結(jié)果數(shù)據(jù)塊集合會(huì)不斷增大,索引隨結(jié)果數(shù)據(jù)塊集合的更新而不斷更新,數(shù)據(jù)庫(kù)中能夠 被索引的數(shù)據(jù)比例不斷提升,所以索引會(huì)越來(lái)越完善,相應(yīng)的查詢效率也會(huì)不斷的提升,此 過(guò)程可稱作數(shù)據(jù)庫(kù)的收斂過(guò)程。
[0006] 在實(shí)現(xiàn)本發(fā)明的過(guò)程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問(wèn)題:
[0007] 采用HCC算法的數(shù)據(jù)庫(kù),通過(guò)范圍數(shù)據(jù)查詢,不斷更新結(jié)果數(shù)據(jù)塊集合,同時(shí)不斷 更新結(jié)果數(shù)據(jù)塊集合的索引,以逐漸提升數(shù)據(jù)庫(kù)的查詢效率,然而,雖然通過(guò)索引中記錄的 各結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍,可以提高定位結(jié)果數(shù)據(jù)塊的效率,但是,通過(guò)索引定位到結(jié)果數(shù) 據(jù)塊之后,進(jìn)一步在塊內(nèi)進(jìn)行數(shù)據(jù)查詢時(shí),查詢的效率仍然較為低下,這導(dǎo)致采用HCC算法 的數(shù)據(jù)庫(kù)的收斂速度較慢,經(jīng)常不能滿足應(yīng)用的需求。另外,采用HCS算法的數(shù)據(jù)庫(kù),雖然 收斂速度較快,但是在數(shù)據(jù)庫(kù)前期進(jìn)行的查詢過(guò)程中,因?yàn)樾枰獙?duì)結(jié)果數(shù)據(jù)塊進(jìn)行排序,而 導(dǎo)致查詢處理的資源(如時(shí)間、處理資源等)耗費(fèi)嚴(yán)重。
【發(fā)明內(nèi)容】
[0008] 為了解決現(xiàn)有技術(shù)的問(wèn)題,本發(fā)明實(shí)施例提供了一種自適應(yīng)索引的方法和裝置, 以在降低數(shù)據(jù)庫(kù)前期查詢過(guò)程中的資源耗費(fèi)的同時(shí),提高數(shù)據(jù)庫(kù)的收斂速度。所述技術(shù)方 案如下:
[0009] 第一方面,提供了一種自適應(yīng)索引的方法,數(shù)據(jù)庫(kù)的結(jié)果數(shù)據(jù)塊集合建立有索引, 所述方法包括:
[0010] 接收攜帶有范圍查詢條件的查詢請(qǐng)求;
[0011] 根據(jù)所述范圍查詢條件,獲取所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊;
[0012] 在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù)設(shè)的代價(jià)條 件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序;
[0013] 根據(jù)經(jīng)過(guò)排序的第一結(jié)果數(shù)據(jù)塊,以及未經(jīng)排序的第一結(jié)果數(shù)據(jù)塊,對(duì)結(jié)果數(shù)據(jù) 塊集合進(jìn)行更新,并更新所述結(jié)果數(shù)據(jù)塊集合的索引。
[0014] 第二方面,提供了一種采用如上所述的自適應(yīng)索引的方法的數(shù)據(jù)查詢方法,所述 方法包括:
[0015] 將所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中的數(shù)據(jù)作為查詢結(jié)果進(jìn)行反饋。
[0016] 第三方面,提供了一種自適應(yīng)索引的裝置,數(shù)據(jù)庫(kù)的結(jié)果數(shù)據(jù)塊集合建立有索引, 所述裝置包括:
[0017] 接收模塊,用于接收攜帶有范圍查詢條件的查詢請(qǐng)求;
[0018] 獲取模塊,用于根據(jù)所述范圍查詢條件,獲取所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一 結(jié)果數(shù)據(jù)塊;
[0019] 排序模塊,用于在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿 足預(yù)設(shè)的代價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序;
[0020] 更新模塊,用于根據(jù)經(jīng)過(guò)排序的第一結(jié)果數(shù)據(jù)塊,以及未經(jīng)排序的第一結(jié)果數(shù)據(jù) 塊,對(duì)結(jié)果數(shù)據(jù)塊集合進(jìn)行更新,并更新所述結(jié)果數(shù)據(jù)塊集合的索引。
[0021] 第四方面,提供了一種數(shù)據(jù)查詢裝置,所述數(shù)據(jù)查詢裝置包括如上所述的自適應(yīng) 索引的裝置,所述數(shù)據(jù)查詢裝置還包括:
[0022] 反饋模塊,用于將所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中的數(shù)據(jù)作為查詢結(jié)果進(jìn) 行反饋。
[0023] 本發(fā)明實(shí)施例提供的技術(shù)方案帶來(lái)的有益效果是:
[0024] 本發(fā)明實(shí)施例中,通過(guò)代價(jià)條件的設(shè)置,可以只對(duì)排序處理的代價(jià)符合要求的結(jié) 果數(shù)據(jù)塊進(jìn)行排序,在數(shù)據(jù)庫(kù)前期,可以降低查詢過(guò)程中的資源耗費(fèi),而且,通過(guò)對(duì)滿足一 定代價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行排序,可以逐步使結(jié)果數(shù)據(jù)塊集合中的結(jié)果數(shù)據(jù)塊有序化, 因?yàn)橐淮闻判蚩梢赃_(dá)到數(shù)次分裂才能達(dá)到的收斂效果,能夠更有效的提升查詢效率,所以, 數(shù)據(jù)庫(kù)的收斂速度能夠得到提高。從而,可以在降低數(shù)據(jù)庫(kù)前期查詢過(guò)程中的資源耗費(fèi)的 同時(shí),提高數(shù)據(jù)庫(kù)的收斂速度。
【專利附圖】
【附圖說(shuō)明】
[0025] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使 用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于 本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他 的附圖。
[0026] 圖1是本發(fā)明實(shí)施例提供的自適應(yīng)索引的方法流程圖;
[0027] 圖2是本發(fā)明實(shí)施例提供的應(yīng)用實(shí)例的處理過(guò)程的示意圖;
[0028] 圖3是本發(fā)明實(shí)施例提供的自適應(yīng)索引的裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0029] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方 式作進(jìn)一步地詳細(xì)描述。
[0030] 實(shí)施例一
[0031] 本發(fā)明實(shí)施例提供了一種自適應(yīng)索引的方法,數(shù)據(jù)庫(kù)的結(jié)果數(shù)據(jù)塊集合建立有索 弓丨,如圖1所示,該方法的處理流程額可以包括如下的步驟:
[0032] 步驟101,接收攜帶有范圍查詢條件的查詢請(qǐng)求。
[0033] 步驟102,根據(jù)該范圍查詢條件,獲取查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊。
[0034] 步驟103,在查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù)設(shè)的代 價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序。
[0035] 步驟104,根據(jù)經(jīng)過(guò)排序的第一結(jié)果數(shù)據(jù)塊,以及未經(jīng)排序的第一結(jié)果數(shù)據(jù)塊,對(duì) 結(jié)果數(shù)據(jù)塊集合進(jìn)行更新,并更新所述結(jié)果數(shù)據(jù)塊集合的索引。
[0036] 發(fā)明實(shí)施例中,通過(guò)代價(jià)條件的設(shè)置,可以只對(duì)排序處理的代價(jià)符合要求的結(jié)果 數(shù)據(jù)塊進(jìn)行排序,在數(shù)據(jù)庫(kù)前期,可以降低查詢過(guò)程中的資源耗費(fèi),而且,通過(guò)對(duì)滿足一定 代價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行排序,可以逐步使結(jié)果數(shù)據(jù)塊集合中的結(jié)果數(shù)據(jù)塊有序化,因 為一次排序可以達(dá)到數(shù)次分裂才能達(dá)到的收斂效果,能夠更有效的提升查詢效率,所以,數(shù) 據(jù)庫(kù)的收斂速度能夠得到提高。從而,可以在降低數(shù)據(jù)庫(kù)前期查詢過(guò)程中的資源耗費(fèi)的同 時(shí),提高數(shù)據(jù)庫(kù)的收斂速度。
[0037] 實(shí)施例二
[0038] 本發(fā)明實(shí)施例提供了一種自適應(yīng)索引的方法,數(shù)據(jù)庫(kù)的結(jié)果數(shù)據(jù)塊集合建立有索 弓丨,索引中可以記錄結(jié)果數(shù)據(jù)塊集合中各結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍,優(yōu)選的,可以采用AVL樹(shù) 作為結(jié)果數(shù)據(jù)塊集合的索引,AVL樹(shù)的每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)記錄每個(gè)結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍。 該方法的執(zhí)行主體可以是建立有數(shù)據(jù)庫(kù)的服務(wù)器或終端設(shè)備等。
[0039] 下面將結(jié)合具體的實(shí)施方式,對(duì)圖1所示的處理流程進(jìn)行詳細(xì)的闡述,內(nèi)容可以 如下:
[0040] 步驟101,接收攜帶有范圍查詢條件的查詢請(qǐng)求。
[0041] 其中,范圍查詢條件是查詢某一數(shù)據(jù)范圍內(nèi)的數(shù)據(jù)的查詢條件,例如,范圍查詢條 件可以是大于a小于b,也可以是大于C,等等。
[0042] 在實(shí)施中,在進(jìn)行大規(guī)模數(shù)據(jù)分析時(shí),可以對(duì)待分析的數(shù)據(jù)建立數(shù)據(jù)庫(kù),分析人員 可以根據(jù)數(shù)據(jù)分析的需求設(shè)置范圍查詢條件,并向數(shù)據(jù)庫(kù)發(fā)送相應(yīng)的查詢請(qǐng)求,例如,分析 人員可以查詢數(shù)據(jù)庫(kù)中1-100范圍內(nèi)的全部數(shù)據(jù),相應(yīng)的范圍查詢條件可以是[1,100]。
[0043] 或者,某應(yīng)用程序可以在終端本地建立數(shù)據(jù)庫(kù),用戶在使用該應(yīng)用程序的過(guò)程中, 可以在終端本地進(jìn)行范圍數(shù)據(jù)查詢,向終端發(fā)出攜帶有某范圍查詢條件的查詢請(qǐng)求,例如, 用戶在使用某即時(shí)通信應(yīng)用時(shí),可以查詢年齡在20-30歲范圍內(nèi)的好友,相應(yīng)的范圍查詢 條件可以是[20, 30]。
[0044] 步驟102,根據(jù)該范圍查詢條件,獲取查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊。
[0045] 其中,查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊是滿足該查詢請(qǐng)求的范圍查詢條件的數(shù)據(jù) 組成的數(shù)據(jù)塊,該步驟可以獲取到一個(gè)第一結(jié)果數(shù)據(jù)塊,也可以獲取到多個(gè)第一結(jié)果數(shù)據(jù) 塊,查詢得到的各第一結(jié)果數(shù)據(jù)塊中,可以包括原有的結(jié)果數(shù)據(jù)塊(即直接在結(jié)果數(shù)據(jù)塊集 合中獲取的結(jié)果數(shù)據(jù)塊),也可以包括新生成的結(jié)果數(shù)據(jù)塊。
[0046] 具體的,可以根據(jù)范圍查詢條件,分別在數(shù)據(jù)庫(kù)的初始數(shù)據(jù)塊集合和/或結(jié)果數(shù) 據(jù)塊集合中進(jìn)行數(shù)據(jù)查詢,獲取查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。在數(shù)據(jù)庫(kù)建立初期,還 沒(méi)有進(jìn)行過(guò)查詢,數(shù)據(jù)庫(kù)中只有初始數(shù)據(jù)塊集合,沒(méi)有結(jié)果數(shù)據(jù)塊集合,這時(shí),可以只在初 始數(shù)據(jù)塊集合中進(jìn)行查詢。在數(shù)據(jù)庫(kù)運(yùn)行的中期,數(shù)據(jù)庫(kù)中既包括初始數(shù)據(jù)塊集合,又包括 結(jié)果數(shù)據(jù)塊集合,可以在初始數(shù)據(jù)塊集合和結(jié)果數(shù)據(jù)塊集合中都進(jìn)行查詢。在數(shù)據(jù)庫(kù)運(yùn)行 的后期,經(jīng)過(guò)大量的范圍數(shù)據(jù)查詢,初始數(shù)據(jù)塊集合中的數(shù)據(jù)都已經(jīng)通過(guò)范圍數(shù)據(jù)查詢過(guò) 程而轉(zhuǎn)移到了結(jié)果數(shù)據(jù)塊集合中,數(shù)據(jù)庫(kù)中只有結(jié)果數(shù)據(jù)塊集合,沒(méi)有初始數(shù)據(jù)塊集合,這 時(shí),可以只在結(jié)果數(shù)據(jù)塊集合中進(jìn)行查詢。隨著結(jié)果數(shù)據(jù)塊集合在數(shù)據(jù)庫(kù)中所占比例的增 大,數(shù)據(jù)庫(kù)的查詢效率會(huì)逐漸提升。
[0047] 初始數(shù)據(jù)塊集合與結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍不存在交集,可以記錄結(jié)果數(shù)據(jù)塊 集合的數(shù)據(jù)范圍,根據(jù)結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍與查詢范圍的關(guān)系(查詢范圍是指范圍 查詢條件的數(shù)據(jù)范圍),確定是否在結(jié)果數(shù)據(jù)塊集合中進(jìn)行查詢,并確定是否在初始數(shù)據(jù)塊 集合中進(jìn)行查詢,相應(yīng)的,執(zhí)行步驟102時(shí),可以分以下幾種情況進(jìn)行不同的處理:
[0048] 處理一,如果結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍完全包含查詢范圍,則根據(jù)結(jié)果數(shù)據(jù)塊 集合中符合范圍查詢條件的數(shù)據(jù),確定查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊。
[0049] 其中,結(jié)果數(shù)據(jù)塊集合中包括對(duì)數(shù)據(jù)庫(kù)進(jìn)行范圍數(shù)據(jù)查詢時(shí)得到的結(jié)果數(shù)據(jù)塊, 結(jié)果數(shù)據(jù)塊集合可以在范圍數(shù)據(jù)查詢的過(guò)程中進(jìn)行更新。結(jié)果數(shù)據(jù)塊集合可以建立有對(duì)應(yīng) 其中各結(jié)果數(shù)據(jù)塊的索引,索引中可以記錄每個(gè)結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍。優(yōu)選的,可以采用 AVL樹(shù)作為結(jié)果數(shù)據(jù)塊集合的索引,在AVL樹(shù)中,每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)一個(gè)結(jié)果數(shù)據(jù)塊,各葉 子節(jié)點(diǎn)按照對(duì)應(yīng)結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍的順序進(jìn)行排列(根據(jù)結(jié)果數(shù)據(jù)塊集合的建立和更 新過(guò)程的特點(diǎn),各結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍不會(huì)出現(xiàn)重疊)。
[0050] 在實(shí)施中,可以將結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍與查詢范圍進(jìn)行比較,如果該查詢 范圍完全在結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍內(nèi),則說(shuō)明所要查詢的數(shù)據(jù)都在結(jié)果數(shù)據(jù)塊集合 中,初始數(shù)據(jù)塊集合沒(méi)有要查詢的數(shù)據(jù),所以,可以按照處理一進(jìn)行處理,只對(duì)結(jié)果數(shù)據(jù)塊 集合進(jìn)行查詢。結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍可以在結(jié)果數(shù)據(jù)塊集合的索引(如AVL樹(shù))中得 到。
[0051] 具體的,根據(jù)結(jié)果數(shù)據(jù)塊集合中各結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍與查詢范圍的關(guān)系的不 同,可以采用不同的方式得到查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊,具體可以如下:
[0052] 情況1,對(duì)于在結(jié)果數(shù)據(jù)塊集合中的每個(gè)結(jié)果數(shù)據(jù)塊,如果塊內(nèi)的一部分?jǐn)?shù)據(jù)在查 詢范圍內(nèi),則判斷塊內(nèi)數(shù)據(jù)是否有序,如果塊內(nèi)數(shù)據(jù)無(wú)序,則使用分裂crack法在塊內(nèi)查詢 符合范圍查詢條件的數(shù)據(jù),組成查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊,如果塊內(nèi)數(shù)據(jù)有序,則根 據(jù)塊內(nèi)數(shù)據(jù)的順序,查詢符合范圍查詢條件的數(shù)據(jù),組成查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
[0053] 在實(shí)施中,可以將結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍與查詢范圍相比較,如果后者包含前者 的一部分,則可以判定該結(jié)果數(shù)據(jù)塊的一部分?jǐn)?shù)據(jù)在查詢范圍內(nèi)。結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍 可以在結(jié)果數(shù)據(jù)塊集合的索引中得到,該索引中記錄了結(jié)果數(shù)據(jù)塊集合中每個(gè)結(jié)果數(shù)據(jù)塊 的數(shù)據(jù)范圍。
[0054] 例如,結(jié)果數(shù)據(jù)塊集合中包括范圍為[1,10]、[11,20]、[21,30]、[31,40]的結(jié)果 數(shù)據(jù)塊,范圍查詢條件為[5, 35],那么,范圍為[1,10]、[31,40]的結(jié)果數(shù)據(jù)塊屬于情況1, 范圍為[11,20]、[21,30]的結(jié)果數(shù)據(jù)塊屬于下面的情況2。
[0055] 對(duì)于情況1這類結(jié)果數(shù)據(jù)塊,因?yàn)榻Y(jié)果數(shù)據(jù)塊中既包含符合范圍查詢條件的數(shù) 據(jù),又包含不符合范圍查詢條件的數(shù)據(jù),所以,需要在塊內(nèi)進(jìn)行查詢來(lái)確定符合范圍查詢條 件的數(shù)據(jù)。
[0056] 塊內(nèi)數(shù)據(jù)是否有序的判斷方法可以有多種,優(yōu)選的,可以在對(duì)結(jié)果數(shù)據(jù)塊進(jìn)行排 序時(shí)標(biāo)記該結(jié)果數(shù)據(jù)塊的塊內(nèi)數(shù)據(jù)有序,沒(méi)有此標(biāo)記的結(jié)果數(shù)據(jù)塊則可以確定其塊內(nèi)數(shù)據(jù) 無(wú)序。
[0057] 在使用crack法對(duì)某個(gè)結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)查詢時(shí),把塊內(nèi)符合范圍查詢條件的 數(shù)據(jù)從結(jié)果數(shù)據(jù)塊中提出,同時(shí)對(duì)該結(jié)果數(shù)據(jù)塊中剩余的數(shù)據(jù)進(jìn)行分裂處理,即將大于范 圍查詢條件的數(shù)據(jù)和小于范圍查詢條件的數(shù)據(jù)分別放在不同的數(shù)據(jù)塊中,得到兩個(gè)(或一 個(gè))新的結(jié)果數(shù)據(jù)塊,提出的符合范圍查詢條件的數(shù)據(jù)組成查詢請(qǐng)求的結(jié)果數(shù)據(jù)塊。這樣, 可以得到兩個(gè)或者三個(gè)結(jié)果數(shù)據(jù)塊,其中一個(gè)是對(duì)應(yīng)查詢請(qǐng)求的第一結(jié)果數(shù)據(jù)塊。
[0058] 根據(jù)塊內(nèi)數(shù)據(jù)的順序查詢符合范圍查詢條件的數(shù)據(jù)的方法可以有多種,優(yōu)選的, 可以采用折半法進(jìn)行查詢,具體的,首先,可以采用折半法查詢范圍查詢條件的邊界值在塊 內(nèi)的位置,然后,可以根據(jù)邊界值的位置和塊內(nèi)數(shù)據(jù)的順序,確定塊內(nèi)符合范圍查詢條件的 數(shù)據(jù)。
[0059] 例如,結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍為[0, 12],塊內(nèi)數(shù)據(jù)順序?yàn)檫f增,范圍查詢條件的數(shù) 據(jù)范圍是[8, 40],可以先取0和12的中間值6與8比較,6小于8,則繼續(xù)去6與12的中間 值9與8比較,依此類推,直到確定8在該結(jié)果數(shù)據(jù)塊中的位置,因?yàn)閿?shù)據(jù)順序?yàn)檫f增,所以 取從8的位置開(kāi)始向后的所有數(shù)據(jù),作為該結(jié)果數(shù)據(jù)塊中符合范圍查詢條件的數(shù)據(jù)。
[0060] 情況2,對(duì)于結(jié)果數(shù)據(jù)塊集合中的每個(gè)結(jié)果數(shù)據(jù)塊,如果塊內(nèi)的全部數(shù)據(jù)都在查詢 范圍內(nèi),則將其作為查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
[0061] 在實(shí)施中,可以將結(jié)果數(shù)據(jù)塊的數(shù)據(jù)范圍與查詢范圍相比較,如果后者完全包含 前者,則可以判定該結(jié)果數(shù)據(jù)塊的全部數(shù)據(jù)都在查詢范圍內(nèi)。
[0062] 對(duì)于情況2這類結(jié)果數(shù)據(jù)塊,因?yàn)槠鋽?shù)據(jù)全部在查詢范圍內(nèi),所以,可以不在塊內(nèi) 進(jìn)行數(shù)據(jù)查詢,獲取塊內(nèi)的全部數(shù)據(jù)組成查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊,即直接將此類 結(jié)果數(shù)據(jù)塊作為查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
[0063] 處理二,如果結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍完全不包含查詢范圍,則根據(jù)初始數(shù)據(jù) 塊集合中符合范圍查詢條件的數(shù)據(jù),確定查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊。
[0064] 其中,初始數(shù)據(jù)塊集合中包含一個(gè)或多個(gè)初始數(shù)據(jù)塊,在數(shù)據(jù)庫(kù)建立時(shí),各初始數(shù) 據(jù)塊由原始數(shù)據(jù)按預(yù)先制定的規(guī)則進(jìn)行分組得到。在處理二中,根據(jù)在初始數(shù)據(jù)塊集合中 查詢到的符合范圍查詢條件的數(shù)據(jù),確定出的查詢請(qǐng)求的結(jié)果數(shù)據(jù)塊的數(shù)目?jī)?yōu)選為一個(gè)。 [0065] 在實(shí)施中,可以將結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍與查詢范圍進(jìn)行比較,如果兩者沒(méi) 有交集,則說(shuō)明結(jié)果數(shù)據(jù)塊集合中不包含符合范圍查詢條件的數(shù)據(jù),而初始數(shù)據(jù)塊集合中 可能包含符合范圍查詢條件的數(shù)據(jù),所以,可以按處理二進(jìn)行處理,只對(duì)初始數(shù)據(jù)塊集合進(jìn) 行查詢。
[0066] 具體的,在處理二中,可以在初始數(shù)據(jù)塊集合中,使用crack法查詢符合范圍查詢 條件的數(shù)據(jù),并將查詢到的數(shù)據(jù)進(jìn)行合并,得到查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
[0067] 可以對(duì)每個(gè)初始數(shù)據(jù)塊進(jìn)行crack法查詢,把符合范圍查詢條件的數(shù)據(jù)從相應(yīng)的 初始數(shù)據(jù)塊中提出,同時(shí)對(duì)該初始數(shù)據(jù)塊中剩余的數(shù)據(jù)行分裂處理,即將大于范圍查詢條 件的數(shù)據(jù)和小于范圍查詢條件的數(shù)據(jù)分別放在不同的數(shù)據(jù)塊中,得到兩個(gè)(或一個(gè))新的初 始數(shù)據(jù)塊。然后,將初始數(shù)據(jù)塊集合中提出的所有符合范圍查詢條件的數(shù)據(jù)進(jìn)行合并,得到 一個(gè)對(duì)應(yīng)查詢請(qǐng)求的第一結(jié)果數(shù)據(jù)塊。
[0068] 處理三,如果結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍包含查詢范圍的一部分,則根據(jù)結(jié)果數(shù) 據(jù)塊集合中符合范圍查詢條件的數(shù)據(jù),確定查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,并 且,根據(jù)初始數(shù)據(jù)塊集合中符合范圍查詢條件的數(shù)據(jù),確定查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一 結(jié)果數(shù)據(jù)塊,將在結(jié)果數(shù)據(jù)塊集合中確定出的查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊, 和在初始數(shù)據(jù)塊集合中確定出的查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,共同作為查詢 請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
[0069] 在實(shí)施中,可以將結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍與查詢范圍進(jìn)行比較,如果前者包 含后者的一部分范圍,則說(shuō)明結(jié)果數(shù)據(jù)塊集合中包含符合范圍查詢條件的數(shù)據(jù),初始數(shù)據(jù) 塊集合中也可能包含符合范圍查詢條件的數(shù)據(jù),所以,可以按處理三進(jìn)行處理,分別對(duì)初始 數(shù)據(jù)塊集合和結(jié)果數(shù)據(jù)塊集合進(jìn)行查詢,具體的處理過(guò)程可以分別參考處理一和處理二中 的內(nèi)容。然后,將在結(jié)果數(shù)據(jù)塊集合中確定出的各第一結(jié)果數(shù)據(jù)塊和在初始數(shù)據(jù)塊集合中 確定出的各第一結(jié)果數(shù)據(jù)塊,全部作為查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
[0070] 步驟103,在查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù)設(shè)的代 價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序。
[0071] 其中,預(yù)設(shè)的代價(jià)條件可以是對(duì)當(dāng)前查詢和/或后續(xù)查詢的資源消耗的要求,該 資源可以是時(shí)間、處理資源(處理器、內(nèi)存等資源)等。
[0072] 具體的,步驟103的處理可以如下:
[0073] 首先,在查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,選取塊內(nèi)數(shù)據(jù)無(wú)序的結(jié)果數(shù)據(jù)塊,作 為第二結(jié)果數(shù)據(jù)塊。
[0074] 該步驟103中根據(jù)預(yù)設(shè)的代價(jià)條件判斷對(duì)那些第一結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排 序,所以可以選取塊內(nèi)數(shù)據(jù)無(wú)序的結(jié)果數(shù)據(jù)塊進(jìn)行后續(xù)處理,對(duì)于數(shù)據(jù)有序的結(jié)果數(shù)據(jù)塊, 則無(wú)需再判斷是否進(jìn)行排序。判斷塊內(nèi)數(shù)據(jù)是否有序的方法可以參考上述處理一中的內(nèi) 容,在此不再累述。
[0075] 然后,獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益和后續(xù)收益。
[0076] 其中,結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益是在當(dāng)前不進(jìn)行塊內(nèi)數(shù)據(jù)排序的情況下本次查 詢節(jié)省的資源量,也即,本次查詢對(duì)該結(jié)果數(shù)據(jù)塊不進(jìn)行塊內(nèi)數(shù)據(jù)排序,與進(jìn)行塊內(nèi)數(shù)據(jù)排 序相比較,在本次查詢過(guò)程中能夠節(jié)省的資源量。結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益是在當(dāng)前進(jìn) 行塊內(nèi)數(shù)據(jù)排序的情況下后續(xù)查詢(可以是后續(xù)一段預(yù)設(shè)時(shí)長(zhǎng)內(nèi)的查詢處理,如一個(gè)月、一 周等)節(jié)省的資源量,也即,本次查詢對(duì)該結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序,與不進(jìn)行塊內(nèi)數(shù) 據(jù)排序相比較,在后續(xù)一段預(yù)設(shè)時(shí)長(zhǎng)內(nèi)的查詢處理中總共可以節(jié)省的資源量。
[0077] 可以設(shè)置代價(jià)函數(shù)U=F(T)用于表示消耗的資源量與處理時(shí)間的關(guān)系,其中,T為 處理時(shí)間,u為代價(jià)值,用于表示消耗的資源量,該資源可以是時(shí)間、或處理資源等,此函數(shù) 可以認(rèn)為是線性函數(shù),即F(T) =a*T.................. (1)
[0078] 其中,a為固定系數(shù)(可以通過(guò)實(shí)驗(yàn)數(shù)據(jù)計(jì)算得出),如果該資源為時(shí)間,那么 F(T) =Τ〇
[0079] 根據(jù)當(dāng)前收益和后續(xù)收益的定義,可以將它們分別用F(T)表示如下:
[0080] 當(dāng)前收益:F(Tq+Tc+Ts)-F(Tq+T c)........................... (2)
[0081] 后續(xù)收益:P^MF(TJTc)-F(T^Tb))........................... (3)
[0082] 其中,Tc為crack法查詢處理時(shí)長(zhǎng),即對(duì)數(shù)據(jù)塊進(jìn)行crack法查詢的處理時(shí)間,T b 為折半法查詢處理時(shí)長(zhǎng),即對(duì)數(shù)據(jù)塊進(jìn)行折半法查詢的處理時(shí)間,Ts為排序處理時(shí)長(zhǎng),即對(duì) 數(shù)據(jù)塊進(jìn)行排序的處理時(shí)間,T tl為當(dāng)前查詢過(guò)程中除crack法查詢和排序之外的工作的處 理時(shí)間,Tl為后續(xù)每次查詢過(guò)程中除crack法查詢和折半法查詢之外的工作的處理時(shí)間,p 為該結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率,t是為計(jì)算后期收益而預(yù)設(shè)的時(shí)長(zhǎng),如一個(gè)月、或三個(gè)月 等,后續(xù)收益可以認(rèn)為是后續(xù)一段時(shí)間內(nèi)節(jié)省的資源量。結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率用于 表示該結(jié)果數(shù)據(jù)塊中的數(shù)據(jù)被查詢的頻率,數(shù)據(jù)查詢頻率為一個(gè)估計(jì)值。
[0083] 可見(jiàn),F(xiàn)(WTs)可以表示,對(duì)于某結(jié)果數(shù)據(jù)塊,如果進(jìn)行塊內(nèi)數(shù)據(jù)排序,本次查 詢過(guò)程所消耗的資源量;F(T c^Tc)可以表示,對(duì)于該結(jié)果數(shù)據(jù)塊,如果不進(jìn)行塊內(nèi)數(shù)據(jù)排 序,本次查詢過(guò)程所消耗的資源量。它們相減則表示,如果本次查詢不對(duì)該結(jié)果數(shù)據(jù)塊進(jìn)行 塊內(nèi)數(shù)據(jù)排序,則本次查詢過(guò)程所能節(jié)省的資源量,即該結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益。
[0084] FCT1+!^)可以近似表示,對(duì)于某結(jié)果數(shù)據(jù)塊,如果不進(jìn)行塊內(nèi)數(shù)據(jù)排序,后續(xù)每次 查詢過(guò)程所消耗的資源量;F(TJT b)可以近似表示,對(duì)于該結(jié)果數(shù)據(jù)塊,如果進(jìn)行塊內(nèi)數(shù)據(jù) 排序,后續(xù)每次查詢過(guò)程所消耗的資源量。它們相減則表示,如果對(duì)該結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi) 數(shù)據(jù)排序,則后續(xù)每次查詢過(guò)程所能節(jié)省的資源量。再將此差值與P、t相乘,即得到該結(jié)果 數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益。
[0085] 具體的,獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益的過(guò)程可以如下:
[0086] 獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的排序處理時(shí)長(zhǎng);根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的 排序處理時(shí)長(zhǎng),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益。
[0087] 由式(1)、(2)可知,當(dāng)前收益可以表示為a*Ts,又a為固定系數(shù),所以獲取某結(jié)果 數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益時(shí),可以根據(jù)該結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的Ts來(lái)確定相應(yīng)的當(dāng)前收益。
[0088] 具體的,獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益的過(guò)程可以如下:
[0089] 獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí)長(zhǎng);獲取每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù) 查詢頻率;根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí)長(zhǎng),以及每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù) 據(jù)查詢頻率,確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益。
[0090] 其中,查詢處理時(shí)長(zhǎng)可以包括crack法查詢處理時(shí)長(zhǎng)和折半法查詢處理時(shí)長(zhǎng)。
[0091] 由式(1)、(3)可知,后續(xù)收益可以表示為(Tc-Tb),又a為固定系數(shù),t為預(yù) 設(shè)數(shù)值,所以獲取某結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益時(shí),可以根據(jù)該結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的T。、T b和 P來(lái)確定相應(yīng)的后續(xù)收益。
[0092] 優(yōu)選的,在上述處理中,可以根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù)(n),確定每個(gè) 第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的排序處理時(shí)長(zhǎng);根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù),確定每個(gè)第 二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí)長(zhǎng),具體可以是,根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù),確 定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的crack法查詢處理時(shí)長(zhǎng),根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè) 數(shù),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的折半法查詢處理時(shí)長(zhǎng)。
[0093] 因?yàn)?,?duì)于數(shù)據(jù)個(gè)數(shù)為η的結(jié)果數(shù)據(jù)塊,進(jìn)行crack法查詢的計(jì)算復(fù)雜度與η成正 t匕,進(jìn)行折半法查詢的計(jì)算復(fù)雜度與lg2n成正比,進(jìn)行排序的計(jì)算復(fù)雜度與n*lg2n成正比, 又計(jì)算復(fù)雜度與處理時(shí)間成正比,所以,可以得出以下關(guān)系式:
[0094] Tc=A*n、Tb=B* I g2n、Ts=On* I g2n........................ (4 )
[0095] 其中,A、B、C是固定系數(shù),由數(shù)據(jù)庫(kù)的軟硬件環(huán)境決定。可以通過(guò)實(shí)驗(yàn)確定A、B、C 的取值,分別對(duì)crack法查詢、折半法查詢和排序三種處理過(guò)程進(jìn)行實(shí)驗(yàn),然后根據(jù)實(shí)驗(yàn)數(shù) 據(jù)中的n、Tc、T B、Ts確定A、B、C的取值。
[0096] 優(yōu)選的,獲取結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率的方式可以有多種,例如,可以采用預(yù)設(shè) 的默認(rèn)值(如〇. 5),該默認(rèn)值可以是一個(gè)經(jīng)驗(yàn)值;或者,可以統(tǒng)計(jì)之前的查詢中涉及該結(jié)果 數(shù)據(jù)塊數(shù)據(jù)范圍內(nèi)數(shù)據(jù)的查詢出現(xiàn)的頻率,將此頻率作為結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率;或 者,可以統(tǒng)計(jì)之前的查詢中該結(jié)果數(shù)據(jù)塊內(nèi)各數(shù)據(jù)被查詢的頻率的平均值,將此平均值作 為結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率。優(yōu)選的,在數(shù)據(jù)庫(kù)建立初期,歷史查詢次數(shù)較少,可以采用 默認(rèn)值作為結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率,當(dāng)數(shù)據(jù)庫(kù)的查詢次數(shù)達(dá)到一定數(shù)量時(shí),可以采用 統(tǒng)計(jì)的方法確定結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率。
[0097] 根據(jù)以上各式,當(dāng)前收益和后續(xù)收益可以分別表示如下:
[0098] 當(dāng)前收益為 a*C*n*lg2n,后續(xù)收益為 p*t*a* (A*n_B*lg2n)。
[0099] 再后,計(jì)算每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益和后續(xù)收益之間的預(yù)設(shè)關(guān)系,并 在所有第二結(jié)果數(shù)據(jù)塊中,選取預(yù)設(shè)關(guān)系滿足預(yù)設(shè)條件的結(jié)果數(shù)據(jù)塊,作為第三結(jié)果數(shù)據(jù) 塊。
[0100] 其中,該選取處理中的代價(jià)條件是對(duì)結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益和后續(xù)收益之間 的預(yù)設(shè)關(guān)系的要求。預(yù)設(shè)關(guān)系可以是比例關(guān)系、差值關(guān)系或乘積關(guān)系等任意計(jì)算關(guān)系,例 如,預(yù)設(shè)關(guān)系可以是
【權(quán)利要求】
1. 一種自適應(yīng)索引的方法,數(shù)據(jù)庫(kù)的結(jié)果數(shù)據(jù)塊集合建立有索引,其特征在于,所述方 法包括: 接收攜帶有范圍查詢條件的查詢請(qǐng)求; 根據(jù)所述范圍查詢條件,獲取所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊; 在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù)設(shè)的代價(jià)條件的 結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序; 根據(jù)經(jīng)過(guò)排序的第一結(jié)果數(shù)據(jù)塊,以及未經(jīng)排序的第一結(jié)果數(shù)據(jù)塊,對(duì)結(jié)果數(shù)據(jù)塊集 合進(jìn)行更新,并更新所述結(jié)果數(shù)據(jù)塊集合的索引。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述范圍查詢條件,獲取所述查 詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,包括: 如果所述結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍完全包含查詢范圍,則根據(jù)所述結(jié)果數(shù)據(jù)塊集合 中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊;其 中,所述查詢范圍是所述范圍查詢條件的數(shù)據(jù)范圍; 如果所述結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍完全不包含所述查詢范圍,則根據(jù)初始數(shù)據(jù)塊集 合中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊; 如果所述結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍包含所述查詢范圍的一部分,則根據(jù)所述結(jié)果數(shù) 據(jù)塊集合中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù) 據(jù)塊,并且,根據(jù)初始數(shù)據(jù)塊集合中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng) 的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,將在所述結(jié)果數(shù)據(jù)塊集合中確定出的所述查詢請(qǐng)求對(duì)應(yīng)的至 少一個(gè)第一結(jié)果數(shù)據(jù)塊,和在所述初始數(shù)據(jù)塊集合中確定出的所述查詢請(qǐng)求對(duì)應(yīng)的至少一 個(gè)第一結(jié)果數(shù)據(jù)塊,共同作為所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述結(jié)果數(shù)據(jù)塊集合中符合所 述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,包括: 對(duì)于所述結(jié)果數(shù)據(jù)塊集合中的每個(gè)結(jié)果數(shù)據(jù)塊,如果塊內(nèi)的一部分?jǐn)?shù)據(jù)在所述查詢范 圍內(nèi),則判斷塊內(nèi)數(shù)據(jù)是否有序,如果塊內(nèi)數(shù)據(jù)無(wú)序,則使用分裂crack法在塊內(nèi)查詢符合 所述范圍查詢條件的數(shù)據(jù),組成所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊,如果塊內(nèi)數(shù)據(jù)有序, 則根據(jù)塊內(nèi)數(shù)據(jù)的順序,查詢符合所述范圍查詢條件的數(shù)據(jù),組成所述查詢請(qǐng)求對(duì)應(yīng)的第 一結(jié)果數(shù)據(jù)塊; 對(duì)于所述結(jié)果數(shù)據(jù)塊集合中的每個(gè)結(jié)果數(shù)據(jù)塊,如果塊內(nèi)的全部數(shù)據(jù)都在所述查詢范 圍內(nèi),則將其作為所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
4. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)初始數(shù)據(jù)塊集合中符合所述范 圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,包括: 在初始數(shù)據(jù)塊集合中,使用crack法查詢符合所述范圍查詢條件的數(shù)據(jù),并將查詢到 的數(shù)據(jù)進(jìn)行合并,得到所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù) 據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù)設(shè)的代價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序,包括: 在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,選取塊內(nèi)數(shù)據(jù)無(wú)序的結(jié)果數(shù)據(jù)塊,作為第 _結(jié)果數(shù)據(jù)塊; 獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益和后續(xù)收益,計(jì)算每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng) 的當(dāng)前收益和后續(xù)收益之間的預(yù)設(shè)關(guān)系,并在所有第二結(jié)果數(shù)據(jù)塊中,選取預(yù)設(shè)關(guān)系滿足 預(yù)設(shè)條件的結(jié)果數(shù)據(jù)塊,作為第三結(jié)果數(shù)據(jù)塊;其中,第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益是在 當(dāng)前不進(jìn)行塊內(nèi)數(shù)據(jù)排序的情況下本次查詢節(jié)省的資源量,第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收 益是在當(dāng)前進(jìn)行塊內(nèi)數(shù)據(jù)排序的情況下后續(xù)查詢節(jié)省的資源量; 對(duì)每個(gè)第三結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收 益,包括: 根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的排序處理時(shí) 長(zhǎng); 根據(jù)所述每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的排序處理時(shí)長(zhǎng),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的 當(dāng)前收益。
7. 根據(jù)權(quán)利要求5所述的方法,其特征在于,獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收 益,包括: 根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí) 長(zhǎng); 獲取每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率; 根據(jù)所述每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí)長(zhǎng),以及所述每個(gè)第二結(jié)果數(shù)據(jù)塊的 數(shù)據(jù)查詢頻率,確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益。
8. -種采用如權(quán)利要求1-7任一項(xiàng)所述的自適應(yīng)索引的方法的數(shù)據(jù)查詢方法,其特征 在于,所述方法包括: 將所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中的數(shù)據(jù)作為查詢結(jié)果進(jìn)行反饋。
9. 一種自適應(yīng)索引的裝置,數(shù)據(jù)庫(kù)的結(jié)果數(shù)據(jù)塊集合建立有索引,其特征在于,所述裝 置包括: 接收模塊,用于接收攜帶有范圍查詢條件的查詢請(qǐng)求; 獲取模塊,用于根據(jù)所述范圍查詢條件,獲取所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果 數(shù)據(jù)塊; 排序模塊,用于在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,對(duì)塊內(nèi)數(shù)據(jù)無(wú)序且滿足預(yù) 設(shè)的代價(jià)條件的結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序; 更新模塊,用于根據(jù)經(jīng)過(guò)排序的第一結(jié)果數(shù)據(jù)塊,以及未經(jīng)排序的第一結(jié)果數(shù)據(jù)塊,對(duì) 結(jié)果數(shù)據(jù)塊集合進(jìn)行更新,并更新所述結(jié)果數(shù)據(jù)塊集合的索引。
10. 根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述獲取模塊,用于: 如果所述結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍完全包含查詢范圍,則根據(jù)所述結(jié)果數(shù)據(jù)塊集合 中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊;其 中,所述查詢范圍是所述范圍查詢條件的數(shù)據(jù)范圍; 如果所述結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍完全不包含所述查詢范圍,則根據(jù)初始數(shù)據(jù)塊集 合中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù)據(jù)塊; 如果所述結(jié)果數(shù)據(jù)塊集合的數(shù)據(jù)范圍包含所述查詢范圍的一部分,則根據(jù)所述結(jié)果數(shù) 據(jù)塊集合中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng)的至少一個(gè)第一結(jié)果數(shù) 據(jù)塊,并且,根據(jù)初始數(shù)據(jù)塊集合中符合所述范圍查詢條件的數(shù)據(jù),確定所述查詢請(qǐng)求對(duì)應(yīng) 的至少一個(gè)第一結(jié)果數(shù)據(jù)塊,將在所述結(jié)果數(shù)據(jù)塊集合中確定出的所述查詢請(qǐng)求對(duì)應(yīng)的至 少一個(gè)第一結(jié)果數(shù)據(jù)塊,和在所述初始數(shù)據(jù)塊集合中確定出的所述查詢請(qǐng)求對(duì)應(yīng)的至少一 個(gè)第一結(jié)果數(shù)據(jù)塊,共同作為所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
11. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述獲取模塊,用于: 對(duì)于所述結(jié)果數(shù)據(jù)塊集合中的每個(gè)結(jié)果數(shù)據(jù)塊,如果塊內(nèi)的一部分?jǐn)?shù)據(jù)在所述查詢范 圍內(nèi),則判斷塊內(nèi)數(shù)據(jù)是否有序,如果塊內(nèi)數(shù)據(jù)無(wú)序,則使用分裂crack法在塊內(nèi)查詢符合 所述范圍查詢條件的數(shù)據(jù),組成所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊,如果塊內(nèi)數(shù)據(jù)有序, 則根據(jù)塊內(nèi)數(shù)據(jù)的順序,查詢符合所述范圍查詢條件的數(shù)據(jù),組成所述查詢請(qǐng)求對(duì)應(yīng)的第 一結(jié)果數(shù)據(jù)塊; 對(duì)于所述結(jié)果數(shù)據(jù)塊集合中的每個(gè)結(jié)果數(shù)據(jù)塊,如果塊內(nèi)的全部數(shù)據(jù)都在所述查詢范 圍內(nèi),則將其作為所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
12. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述獲取模塊,用于: 在初始數(shù)據(jù)塊集合中,使用crack法查詢符合所述范圍查詢條件的數(shù)據(jù),并將查詢到 的數(shù)據(jù)進(jìn)行合并,得到所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊。
13. 根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述排序模塊,用于: 在所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中,選取塊內(nèi)數(shù)據(jù)無(wú)序的結(jié)果數(shù)據(jù)塊,作為第 _結(jié)果數(shù)據(jù)塊; 獲取每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益和后續(xù)收益,計(jì)算每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng) 的當(dāng)前收益和后續(xù)收益之間的預(yù)設(shè)關(guān)系,并在所有第二結(jié)果數(shù)據(jù)塊中,選取預(yù)設(shè)關(guān)系滿足 預(yù)設(shè)條件的結(jié)果數(shù)據(jù)塊,作為第三結(jié)果數(shù)據(jù)塊;其中,第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的當(dāng)前收益是在 當(dāng)前不進(jìn)行塊內(nèi)數(shù)據(jù)排序的情況下本次查詢節(jié)省的資源量,第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收 益是在當(dāng)前進(jìn)行塊內(nèi)數(shù)據(jù)排序的情況下后續(xù)查詢節(jié)省的資源量; 對(duì)每個(gè)第三結(jié)果數(shù)據(jù)塊進(jìn)行塊內(nèi)數(shù)據(jù)排序。
14. 根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述排序模塊,用于: 根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的排序處理時(shí) 長(zhǎng); 根據(jù)所述每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的排序處理時(shí)長(zhǎng),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的 當(dāng)前收益。
15. 根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述排序模塊,用于: 根據(jù)每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)個(gè)數(shù),確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí) 長(zhǎng); 獲取每個(gè)第二結(jié)果數(shù)據(jù)塊的數(shù)據(jù)查詢頻率; 根據(jù)所述每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的查詢處理時(shí)長(zhǎng),以及所述每個(gè)第二結(jié)果數(shù)據(jù)塊的 數(shù)據(jù)查詢頻率,確定每個(gè)第二結(jié)果數(shù)據(jù)塊對(duì)應(yīng)的后續(xù)收益。
16. -種數(shù)據(jù)查詢裝置,其特征在于,所述數(shù)據(jù)查詢裝置包括如權(quán)利要求9-15任一項(xiàng) 所述的自適應(yīng)索引的裝置,所述數(shù)據(jù)查詢裝置還包括: 反饋模塊,用于將所述查詢請(qǐng)求對(duì)應(yīng)的第一結(jié)果數(shù)據(jù)塊中的數(shù)據(jù)作為查詢結(jié)果進(jìn)行反 饋。
【文檔編號(hào)】G06F17/30GK104516906SQ201310456838
【公開(kāi)日】2015年4月15日 申請(qǐng)日期:2013年9月29日 優(yōu)先權(quán)日:2013年9月29日
【發(fā)明者】胡衛(wèi)松, 李曼 申請(qǐng)人:日電(中國(guó))有限公司