1. 程式人生 > >點陣圖索引bitmap(二):現代點陣圖索引技術

點陣圖索引bitmap(二):現代點陣圖索引技術

點陣圖索引bitmap(一):基本概念可知,傳統點陣圖索引技術最大的侷限性主要表現在,高基數列的索引尺寸過大從而影響查詢效能。所以,從控制索引大小和減少查詢響應時間這兩個出發點,業內的優化策略一般從以下三個角度切入:分桶(binning)、編碼(encoding)和壓縮(compression)。而在實際的使用場景中,這三種優化策略一般會結合使用。

1 分桶策略

分桶策略,即採用“桶”將distinctkey合併為多個區間,壓縮distinct key值的數量,從而縮減點陣圖索引的大小。傳統點陣圖索引中的分桶策略預設採用的是等寬分桶(equal-width binning),如圖2.4所示,我們將區間[0,1]劃分為四個桶,分別為[0,0.25),[0.25,0.5),[0.5,0.75),[0.75,1),而每一個distinct key對應唯一的bin ID,從而將8個distinct key縮減為4個bin ID。
分桶策略1


分桶策略2

2 編碼策略

編碼策略相對於分桶策略來說,在減少點陣圖索引數量的基礎上,又能夠減少在查詢過程中所訪問的點陣圖索引的個數。常見的編碼策略有四種:二進位制編碼(binary encoding,BN)、等值編碼(equality encoding,E1)、範圍編碼(range encoding)、區間編碼(interval encoding),如圖2.6所示。其中,二進位制編碼思想不再贅述;等值編碼與等寬分桶思想一致,適用於精確查詢,但索引尺寸較大,適用於distinct key值較少的情況;範圍編碼保留單側區間,形如(X≤2),適用於one-sided range query場景,對於雙側範圍的查詢則需要再對相關列對應的點陣圖索引作異或(XOR)操作;區間編碼保留雙側區間,形如(1≤X≤2),適用於two-sided range query場景。

那麼,為什麼說編碼策略還能夠減少在查詢過程中所訪問的點陣圖索引個數。主要是充分利用了不同編碼策略的特性。比如,查詢“X≤2”,如果使用等值編碼(equality encoding),那麼我們需要對e0、e1、e2這三列對應的點陣圖索引做或(OR)操作,從而獲得查詢結果;但是如果我們使用範圍編碼(range encoding),直接返回γ2列即可。

編碼策略
同時,在這四種編碼策略的基礎上,我們通過組合形成更為複雜的編碼方式,從而應對各種複雜的查詢場景。下面我們簡單介紹下基於以上四種基礎編碼方式衍生出來的兩類高階編碼方式:多要素編碼(multi-component encoding)和多層次編碼(multi-level encoding)。其中,多要素編碼的核心思想與二進位制編碼基本一致,不過最主要的區別在於每個要素都可以獨立確定基數;而多層次編碼則使用多級分桶策略思想,其中,distinct keys按照不同的粒度劃分為不同層級的“桶”,每層桶都使用獨立的編碼策略,內層最細粒度的桶採用等值編碼策略,從而根據不同的查詢需求,使用不同層次粒度的桶與編碼策略,加速整個查詢過程。

常見的多層編碼策略一般使用兩層,外層採用基礎的三種編碼策略:等值、範圍與區間編碼,內層我們則統一採用等值編碼策略,目的依然是為了解決高精度下“candidate check”問題,那麼對應的二層編碼策略則有三種:二層等值編碼(two-level equality-equality encoding,EE)、二層範圍-等值編碼(two-level range-equality encoding,RE)、二層區間-等值編碼(two-level interval-equality encoding,IE)。

3 壓縮策略

在點陣圖索引中,每一個bitmap往往都包含了大量的“0”,這個特性使其非常適合壓縮。一個好的點陣圖索引壓縮演算法需要達到兩個目標:(1)提高按位邏輯操作的速率;(2)減少查詢響應時間。所以業內的研究主要集中於“行程長度壓縮編碼(Run-Length Encoding,RLE)”與“差分壓縮編碼(Delta-Encoding,DE)”演算法。其中,RLE的主要思想是將連續多個相同的數值壓縮成“數量 x 數值”的形式,例如:000000->6(*)0;而DE的主要思想是將儲存一個序列中的plain data轉換為儲存此序列中資料間的差值,例如:2, 4, 6, 9, 7->2, 2, 2, 3, −2;而儲存的差值又可以使用RLE演算法進一步壓縮。

目前,常用的點陣圖索引壓縮演算法有以下兩類:位元組對齊點陣圖編碼(Byte-aligned Bitmap Code, BBC)和字對齊點陣圖編碼(Word-aligned Bitmap Code, WBC),其中BBC演算法應用於Oracle資料庫的點陣圖索引中,並受智慧財產權保護;而WBC則衍生出眾多編碼方式:Word-Aligned Hybrid (WAH),PartitionedWord-Aligned Hybrid (PWAH),Position List Word-Aligned Hybrid (PLWAH),Enhanced Word-Aligned Hybrid (EWAH)等。