專利名稱:一種針對二維數(shù)據(jù)表的高效索引及創(chuàng)建和查詢方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)存儲領(lǐng)域,尤其是涉及一種針對二維數(shù)據(jù)表的高效索引及創(chuàng)建和查詢方法。
背景技術(shù):
關(guān)系型數(shù)據(jù)庫中的關(guān)系表,就是一種典型的二維數(shù)據(jù)。常見的數(shù)據(jù)計算系統(tǒng)中往往采用粗粒度索引(rough index)或者精確索引,來降低針對字段進(jìn)行搜索時的I/O量,從而提升查詢性能。精確索引又分全局索引和局部索引兩種,以哈希索引為例全局哈希索引查詢性能很好,但創(chuàng)建和維護(hù)的代價極高,數(shù)據(jù)膨脹率很大(往往比原始數(shù)據(jù)膨脹1. 5倍以上,甚至更大)。局部哈希索引對每個數(shù)據(jù)塊分別創(chuàng)建索引,對某個數(shù)據(jù)塊更新時的維護(hù)代價僅限于這個數(shù)據(jù)塊的索引數(shù)據(jù),因而維護(hù)代價較低。但是,查詢時每塊的索引都要被掃描,I/o次數(shù)較多,性能不如全局索引。粗粒度索引是一種局部索引,其存儲的內(nèi)容是每個數(shù)據(jù)塊中的統(tǒng)計信息。由于統(tǒng)計信息數(shù)據(jù)量很小,在查詢時,其I/o代價幾乎可以忽略不計如果要查找某一字段中取值為100的數(shù)據(jù),可以利用帶有最大值、最小值信息的粗粒度索引,即可在無需打開任何數(shù)據(jù)的前提下,立即排除掉肯定不命中的數(shù)據(jù)塊(最大值小于100或最小值大于100);同時,可以確定肯定命中的數(shù)據(jù)塊(最大值和最小值都等于100)。而后,再打開其他無法確定的數(shù)據(jù),即可準(zhǔn)確定位所有命中的數(shù)據(jù)。但對于分布較離散的數(shù)據(jù)非常容易失效(極端情況下,粗粒度索引可能無法過濾掉任何數(shù)據(jù),查詢性能無法得到任何提升)。再者,粗粒度索引無法精確定位查詢結(jié)果,對于不能精確排除的數(shù)據(jù)塊,仍要打開原始數(shù)據(jù)進(jìn)行掃描。
發(fā)明內(nèi)容
本發(fā)明要解決的問題是提供一種針對二維數(shù)據(jù)表的高效索引及創(chuàng)建和查詢方法。為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案是一種針對二維數(shù)據(jù)表的高效索引的創(chuàng)建方法,包括I)將二維數(shù)據(jù)表分成若干的數(shù)據(jù)塊;2)為數(shù)據(jù)塊創(chuàng)建塊粗粒度索引;3)為數(shù)據(jù)塊創(chuàng)建塊精確索引。進(jìn)一步的,所述的第3步驟中的塊局部索引為局部哈希索引。進(jìn)一步的,所述的第I步驟包括I)按一定行數(shù)將二維表進(jìn)行水平切割;2)按列將二維表進(jìn)行垂直切割。根據(jù)本發(fā)明的另一方面還提供了一種針對二維數(shù)據(jù)表的高效索引,包括塊粗粒度索引,用以排除肯定不命中目標(biāo)數(shù)據(jù)塊和確定肯定命中的目標(biāo)數(shù)據(jù)塊;
塊局部精確索引,用以精確定位塊中命中數(shù)據(jù)。進(jìn)一步的,所述塊局部精確索引為塊局部哈希索引。進(jìn)一步的,所述的高效索引包括至少一個的塊粗粒度索引和至少一個的塊局部精確索引。進(jìn)一步的,所述的粗粒度索引存儲針對塊的統(tǒng)計信息。進(jìn)一步的,所述的粗粒度索引存儲針對塊中數(shù)據(jù)的最大值和最小值。本發(fā)明還提供了一種針對二維數(shù)據(jù)表的高效索引的查詢方法,包括包括I)根據(jù)粗粒度索引選出塊中肯定命中和肯定不命中的目標(biāo)塊; 2)根據(jù)上一步篩選出的結(jié)果對于無法判定的目標(biāo)塊用局部精確索引進(jìn)行掃描,最終精確定位全部命中的數(shù)據(jù)。由于采用上述技術(shù)方案,能夠以較低的創(chuàng)建和維護(hù)代價,同時索引數(shù)據(jù)膨脹率較小,I/O代價低,有效的提高了效率。
圖1是本發(fā)明針對二維數(shù)據(jù)表的高效索引的創(chuàng)建方法流程示意2是本發(fā)明針對二維數(shù)據(jù)表的高效索引的查詢方法流程示意3是本發(fā)明中一個實例中將二維數(shù)據(jù)表分割成數(shù)據(jù)塊的示意4是本發(fā)明中一個實例二維數(shù)據(jù)表索引存儲示意5是本發(fā)明中一個實例中針對設(shè)定查詢條件為數(shù)據(jù)取值等于100的查詢示意圖
具體實施例方式由圖1可以看出,本發(fā)明針對二維數(shù)據(jù)表的高效索引的創(chuàng)建方法流程按照I)將二維數(shù)據(jù)表分成若干的數(shù)據(jù)塊;2)為數(shù)據(jù)塊創(chuàng)建塊粗粒度索引;3)為數(shù)據(jù)塊創(chuàng)建塊局部索引;采用以上3個步驟對二維數(shù)據(jù)表創(chuàng)建高效索引。圖1按照水平分割粒度為η (即每個數(shù)據(jù)塊中數(shù)據(jù)行數(shù)為η)進(jìn)行切割。另外,一般都采用如圖3所示按一定行數(shù)和列數(shù)對二維表進(jìn)行水平和垂直切割。圖2為是本發(fā)明針對二維數(shù)據(jù)表的高效索引的查詢方法流程示意圖,按照圖2所設(shè)定的步驟對二維數(shù)據(jù)表進(jìn)行分塊高效檢索。本發(fā)明的一個實例場景,如圖3所示,將二維數(shù)據(jù)從邏輯上二維數(shù)據(jù)從邏輯上進(jìn)行網(wǎng)格化(無需將數(shù)據(jù)在物理上進(jìn)行網(wǎng)格化存儲),形成以數(shù)據(jù)塊為單位的視圖;本實施例作為一個列式數(shù)據(jù)庫,每個數(shù)據(jù)列獨(dú)立存儲,并以固定行數(shù)為單位劃分塊(Data Cell)。在為其中一列數(shù)據(jù)創(chuàng)建索引時,把粗粒度索引緊湊存儲于一個文件中;本地哈希索引也緊湊存儲保存在另一個文件中(其中,每個塊的某一個哈希索引的中屬于同一個哈希沖突鏈中的所有數(shù)據(jù)緊湊存儲在一起,保證掃描一個塊的索引只需一次I/o)。圖4中,每個局部索引中的小方塊表示局部哈希索弓I中哈希值相同的數(shù)據(jù)所組成的哈希桶如圖5所示,在設(shè)定了一定的查詢條件以后,在本實施例中設(shè)定為查詢數(shù)值為100的條件,在對二維數(shù)據(jù)表進(jìn)行查詢時,首先對組成二維數(shù)據(jù)表的每一個數(shù)據(jù)塊(Data Cell)的粗粒度索引進(jìn)行過濾,由粗粒度索引的特性可知,如本實例中,粗粒度索引保存了該塊的統(tǒng)計信息,包括了該塊中最大和最小值。通過粗粒度索引的初步過濾,能夠有效的選出肯定命中和肯定不命中的塊,對于暫時無法精確確定是否命中的情況,則由塊中的局部哈希索引進(jìn)行進(jìn)一步的掃描,可以精確定位全部命中的數(shù)據(jù)。在進(jìn)行精確查詢時,粗粒度索引文件只需一次IO即可被裝入內(nèi)存。經(jīng)過粗粒度索引過濾后,每個需要用局部哈希索引進(jìn)行定位的數(shù)據(jù)塊也只需一次IO即可。在數(shù)億至數(shù)百億規(guī)模的數(shù)據(jù)量下進(jìn)行測試,使用本發(fā)明所描述的索引,可以使平均查詢性能提升5倍以上。本發(fā)明相對于全局哈希索引方案,雖然查詢性能有所不及,但是其創(chuàng)建和維護(hù)代價更低,數(shù)據(jù)膨脹率也相對較低,雖然增加了粗粒度索引,但由于粗粒度索引的創(chuàng)建維護(hù)代價極低,其性能損失和數(shù)據(jù)膨脹幾乎可以忽略不計。查詢時,首先基于粗粒度索引進(jìn)行過濾,多數(shù)情況下可以過濾掉一些DC,而這個過濾的I/O代價比起打開并掃描這些被過濾掉數(shù)據(jù)塊的本地哈希索引要小得多。本發(fā)明對于二維數(shù)據(jù)表的追加數(shù)據(jù)建立索引也非常簡單、便捷,對于新增加的數(shù)據(jù)也可以按照上述方法創(chuàng)建索引,對于新增加的數(shù)據(jù)可以分割成若干的塊,單獨(dú)為新增加的數(shù)據(jù)增加一個或多個的塊粗粒度索引及塊哈希索引,這樣無需對整個二維數(shù)據(jù)表的索引進(jìn)行修改,維護(hù)代價很低。以上對本發(fā)明的一個實施例進(jìn)行了詳細(xì)說明,但所述內(nèi)容僅為本發(fā)明的較佳實施例,不能被認(rèn)為用于限定本發(fā)明的實施范圍。凡依本發(fā)明申請范圍所作的均等變化與改進(jìn)等,均應(yīng)仍歸屬于本發(fā)明的專利涵蓋范圍之內(nèi)。
權(quán)利要求
1.一種針對二維數(shù)據(jù)表的高效索引的創(chuàng)建方法,包括 1)將二維數(shù)據(jù)表分成若干的數(shù)據(jù)塊(DataCell,簡稱DC); 2)為數(shù)據(jù)塊創(chuàng)建塊粗粒度索引; 3)為數(shù)據(jù)塊創(chuàng)建塊精確索引。
2.根據(jù)權(quán)利要求1所述的創(chuàng)建方法,其特征在于所述的第3步驟中的塊局部索引為局部哈希索引。
3.根據(jù)權(quán)利要求1所述的創(chuàng)建方法,其特征在于所述的第I步驟包括 O按一定行數(shù)將二維表進(jìn)行水平切割; 2)按列將二維表進(jìn)行垂直切割。
4.一種根據(jù)權(quán)利要求1所述的創(chuàng)建方法所創(chuàng)建的針對二維數(shù)據(jù)表的高效索引,所述的聞效索引包括 塊粗粒度索引,用以排除肯定不命中目標(biāo)數(shù)據(jù)塊和確定肯定命中的目標(biāo)數(shù)據(jù)塊; 塊局部精確索引,用以精確定位塊粗粒度索弓I無法精確判定的數(shù)據(jù)塊中命中數(shù)據(jù)的精確位置。
5.根據(jù)權(quán)利要求4所述的高效索引,其特征在于所述塊局部精確索引為塊局部哈希索引。
6.根據(jù)權(quán)利要求4所述的高效索引,其特征在于所述的高效索引包括至少一個的塊粗粒度索引和至少一個的塊局部精確索引。
7.根據(jù)權(quán)利要求4所述的高效索引,其特征在于所述的粗粒度索引存儲針對塊的統(tǒng)計信息。
8.根據(jù)權(quán)利要求7所述的高效索引,其特征在于所述的粗粒度索引存儲針對塊中數(shù)據(jù)的最大值和最小值。
9.一種根據(jù)權(quán)利要求4所述的針對二維數(shù)據(jù)表的高效索引的查詢方法,包括 1)根據(jù)粗粒度索引選出塊中肯定命中和排除肯定不命中的目標(biāo)塊; 2)根據(jù)上一步篩選出的結(jié)果對于無法判定的目標(biāo)塊用局部精確索引進(jìn)行掃描,最終精確定位全部命中的數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種針對二維數(shù)據(jù)表的高效索引,包括用以排除所屬塊的肯定不命中的目標(biāo)的數(shù)據(jù)塊粗粒度索引和用以精確定位塊粗粒度索引無法精判定的數(shù)據(jù)塊中命中數(shù)據(jù)的塊精準(zhǔn)索引。此外,本發(fā)明還提供了一種針對二維數(shù)據(jù)表的高效索引的創(chuàng)建及查詢方法。本發(fā)明的有益效果是能夠以較低的創(chuàng)建和維護(hù)代價來創(chuàng)建和維護(hù)二維數(shù)據(jù)表索引,同時索引數(shù)據(jù)膨脹率較小,I/O代價低,有效的提高了效率。
文檔編號G06F17/30GK103020305SQ20121059410
公開日2013年4月3日 申請日期2012年12月29日 優(yōu)先權(quán)日2012年12月29日
發(fā)明者孟祥斌, 崔維力, 武新, 趙偉 申請人:天津南大通用數(shù)據(jù)技術(shù)有限公司