• 沒有找到結果。

簽章索引檔(S IGNATURE FILE INDEX )

在文檔中 XML文件搜尋引擎的研究 (頁 28-34)

三、 XML文件索引與查詢

3.2 簽章索引檔(S IGNATURE FILE INDEX )

簽章索引檔(Signature file index)[4][14]是一種相當特殊的索引方 法,尤其利用在無結構(non-structured)的資料的索引建立,例如應用在多 媒體檔案[15]。相較於反向索引方法(inverted index)[4],其索引檔案所佔 的空間小很多,在比對上也由於結構上(位元運算)的關係,有其速度優勢。

以下將就簽章索引檔的一些概念、方法並且就與簽章索引方法相關的雜湊函數 做一說明。

3.2.1 簽章索引檔概念

簽章 Signature 利用一串 bit pattern 或者稱為 bit string。Bit string 如圖 12,是利用特殊設計的 hash function 對字串產生一個 hash value,再根 據這 hash value 對固定長度(固定位元數)的 bit string 中某幾個位元

(bit)設為 1(true),其他的位元設為 0(false),而被設為 1 的位元在每 個 bit string 中 的 個 數 也 是 固 定 的 。 例 如 : student 這 字 串 經 過 hash function 的運算之後,取得一個整數值 3,如果 bit string 的長度為 8 的話,

而每一個 bit string 只能出現一個位元是”1”的話,這個代表 student 的 signature 就是 00001000,這就是 signature 的產生過程。

圖 12 個別節點利用特殊 Hashing function 編碼轉成 bitstring 而 signature file 就是儲存這些 pattern 的 binary file,只不過存的不 是字串或文件本身,而是一連串由上述方法產生的簽章(signature)。

以一個文字檔為例,來說明 signature file。假設該文字檔包含四個字 串,分別是 school、student、name 和 fname,這四個字串先透過上述 hash function 的計算取得三個 hash value,在此假設分別是 3,2,6 跟 7。經由這 四個整數值轉換成 bit string 後,分別為 00001000,00000100, 01000000 和 10000000。接著將上述四個 bit string 做某種位元的運算之後,得到該文件的 bit string,這個就是代表該文字檔的 signature,其實跟前面單一字串產生的 signature 沒兩樣,唯一的差別在於 signature file 中含”1”位元不是固定數 目,甚至連 bit string 的長度也會不長短不一。這點將再後一節討論。

有了 signature file 的索引檔之後,如果要找哪些檔案中含有 student 跟 name 兩個字串的話,只要將 student 跟 name 兩個字串分別先經過上述的 hash

block 做位元的 and 運算後,結果跟 query bit string 相等的話,那麼這個 signature block 所代表的文件就是符合查詢條件的文件。

圖 13 Filter 的概念應用

從以上可以發現 signature file 利用連續儲存的位元比對降低字元的查詢 時的 I/O 成本(I/O cost),快速判斷查詢字串或是字串組合存在與否,這點 可用來輔助將 XML 文件儲存在關聯式資料庫查詢時,充當 filter 功能,如圖 13。首先,當所有查詢路徑的節點字串所產生的 bitstring 經過位元運算之 後,所得的 signature 沒有在 signature file 中時,就不必再進行繁瑣的資料 庫操作。另一方面,可以用來改進資料庫查詢時大小寫不分的缺點,因為當你 要查 book 跟 Book 時,透過 SQL command 的查詢,它們都會被選取的,而 XML 文件本身所有名稱及文字節點是有大小寫之分的。

3.2.2 簽章索引檔種類

本節主要說明文件的 block signature 產生方式,主要有 Word signature 及 Superimposed coding 這兩種:

(1) Concatenation Signature(WS)方法

如圖 14 所示,假設該文件僅包含四個字串,此法主要是將整個文件 中的每個字串,經由特殊的雜湊函數取得固定長度的 word signature , 這 裡 的 bit pattern 的 長 度 為 f=4 , 每 個 bit pattern 只 能 出 現 一

個”1”。再將這些位元樣式(word signatures)連接(concatenate)起 來而形成文件的簽章(signature)。這個方法可以保留字串在文件中的 位置資訊(positioning information),不過會造成每一筆文件的簽章 長度不一樣,增加處理的複雜度。

圖 14 Word signature 方法

(2) Superimposed Coding(SC)方法

第二種簽章方法如圖 15 所示,與 word signature 同樣的文件內容,

一樣透過特殊的雜湊函數分別取得文件中每個字串的雜湊值,再利用這雜 湊值獲得每個字串固定長度的 bit pattern,在此例 bit pattern 的長度 f=20,而每個 bit patten 只能出現一個”1”。所不同的是,在建構文件的 簽章時,採用不同的方式取得文件的簽章,也就是將文件分成若干個 block,每個 block 包含固定數量的字串,再將 block 中每個字串取得簽 章,每個字串的簽章執行位元 or(bitwise)運算,即得到所謂的 block signature。接著連接(concatenate)所有 block signature 就是文件的 簽章。在這 block signature 中,只要第 13 位元被設為”1”(on),即表 示 block signature 包含了 student 字串。

圖 15 Superimposed Coding 方法

嚴格來講,Word signature 是 Superimposed Coding 的一個特例,

當 Superimposed Coding 方法中 block 的字數(words)等於 1 時,

Superimposed Coding 方 法 就 跟 Word signature 方 法 一 樣 。 Superimposed Coding 利用邏輯區塊主要是節省比對次數,進而縮短搜尋 時間。

3.2.3 雜湊函數的編碼

在 3.2.2 中所提到的兩個簽章索引方法,其中雜湊函數(hash function)

扮演著相當重要的角色,本節將就 hash function 以及本論文所採用的 hash function 如何對 XML 文件編碼做一說明。

雜湊函數運用很廣泛,像 ORACLE 就利用雜湊函數在它的資料庫軟體上。雜 湊技術主要是利用特殊設計的函數來計算關鍵值(key),直接存取該關鍵值所 代表的相關資料,這裡所謂的「直接」意味著不需透過繁複的鍵值比對而能直 接取得資料的意思。如此即能達到直接存取,降低搜尋時間,如圖 16 的雜湊表 的應用。

雖 然 雜 湊 函 數 能 提 供 直 接 存 取 資 料 的 優 點 , 但 不 能 避 免 的 資 料 過 載

(overflow)的問題。為了解決 overflow 或是 bucket split 問題,也發展出 over chaining、open address 等新的解決技術。當然也有許多針對 hashing 技 術 的 新 發 明 , 如 Dynamic hashing[18] 、 Extendible Hashing[19] 及 Linear Hashing[20]等。

圖 16 雜湊函數的應用-雜湊表

雜湊函數應用方式也很多樣,如用於雜湊表的String Hashing,用於使用 者驗證及授權的Cryptographic Hashing、用視覺辨識的Geometric Hashing及 Bloom Filter[17]等。本論文主要是應用其中的Bloom Filter。

Bloom Filter 方法主要是利用多個雜湊函數(multiple hash functions)

對每個鍵值(key)產生雜湊值,再利用這些雜湊值將某個固定長度的 bit string 中相對位置設為“1”,如圖 17。

圖 17 利用 Bloom Filter 建立 bit string

利用簽章索引方法建立索引時,要考慮 false drop 問題,Bloom Filter 可 以產生稀疏(sparse)的 bit string,如此可降低 false drop 的機率。

圖 18 Superimposed coding 的 block 對 XPath 查詢字串的影響 本論文所採用類似 superimposed coding 的編碼方式時,主要是將整個 XML 文 件 中 的 元 素 ( element ) 、 屬 性 名 稱 ( attribute name ) 、 屬 性 值

(attribute value)及文字(text)的字串值,利用 Bloom Fliter 方法加以 編碼。這裡要考量到如果以 superimposed coding 的編碼方式編碼,可能在 XPath 查詢時,因為 block 的關係而發生有該路徑及節點存在,卻資料編碼在不 同 block 中,造成查詢結果失敗,如圖 17,分別以 Bloom Filter 求出 XPath 查 詢字串中的 Book、Author、Name 及 John 四個字串的 bitstring 為 0010000,

0001000,0100000,0000001,分別對簽章索引檔比對,如圖 18,本論文另外利 用一個文件 table 儲存每個 block 所對應的文件 Id,也就是 DocId。每個查詢 關鍵字經由 signature file 比對之後,如果存在該樣式,即取得該 block id 透過 block Id 到上述 table 查出該 block 所屬文件的 ID,接著比較各個查詢關 鍵字經由上述過程所取得的文件 Id,如果存在相同文件 Id 則表示在資料庫中有 某一文件包含這幾個關鍵字,可以進一步透過資料庫中,所儲存的位置資料進 一步驗證是否該文件具備 XPath 表示式的階層關係。

在文檔中 XML文件搜尋引擎的研究 (頁 28-34)

相關文件