專利名稱:文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù),即InforGuard水印模 塊采用的水印存取機(jī)制。
背景技術(shù):
在功能上,InforGuard為驗(yàn)證網(wǎng)頁(yè)文件的合法性,必須存儲(chǔ)網(wǎng)頁(yè) 文件的原始水印(水印即文件的摘要信息),以便比對(duì)。每個(gè)網(wǎng)頁(yè)都對(duì) 應(yīng)自己的水印,水印總數(shù)量與網(wǎng)站上網(wǎng)頁(yè)的總數(shù)量成正比,網(wǎng)站規(guī)模 很大時(shí),就必須存儲(chǔ)大量的水印數(shù)據(jù)。為保證水印存儲(chǔ)和查詢的高效 率,InforGuard產(chǎn)品中設(shè)計(jì)了 一個(gè)基于多級(jí)索引技術(shù)的文件數(shù)據(jù)庫(kù)來(lái) 存儲(chǔ)水印信息。
文件數(shù)據(jù)庫(kù)區(qū)別于各種商業(yè)數(shù)據(jù)庫(kù)(如Oracle等),特點(diǎn)是輕便、 專用性強(qiáng),許多產(chǎn)品都會(huì)實(shí)現(xiàn)自己的文件數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù)。 目前,在此領(lǐng)域采用的方案為
存儲(chǔ)數(shù)據(jù)的文件由定長(zhǎng)的記錄組成,記錄是固定結(jié)構(gòu),包含key 和data兩部分,key即數(shù)據(jù)的鍵信息,而data存儲(chǔ)數(shù)據(jù)內(nèi)容信息。 記錄之間緊湊存儲(chǔ)。查詢記錄時(shí),需要遍歷整個(gè)文件對(duì).key進(jìn)行匹配, 找到需要的data。
該方法的特點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單,易于控制,穩(wěn)定性和可靠性較高。但 是查詢效率是該項(xiàng)技術(shù)使用的主要限制。雖然通過(guò)內(nèi)存緩沖技術(shù)(即 cache技術(shù))可以提高查詢的效率,但是受實(shí)際環(huán)境的限制,當(dāng)需要 存儲(chǔ)大量數(shù)據(jù)時(shí),仍然很難滿足效率上的要求。
發(fā)明內(nèi)容
本發(fā)明的目的就是針對(duì)上述的不足,提供了一種基于文件數(shù)據(jù)庫(kù) 的多級(jí)索引技術(shù),能夠有效提高文件數(shù)據(jù)庫(kù)的查詢性能,從而擴(kuò)展文 件數(shù)據(jù)庫(kù)的可用范圍。
多級(jí)索引技術(shù),主要采用了以下技術(shù)手段
1. 建立獨(dú)立的索引文件
當(dāng)在數(shù)據(jù)文件中存儲(chǔ)數(shù)據(jù)記錄(包含key和data )時(shí),將key和 該記錄的存儲(chǔ)偏移值作為索引另存在一個(gè)獨(dú)立的文件中,稱為索引文 件。當(dāng)根據(jù)key查詢數(shù)據(jù)時(shí),先從索引文件中找到索引,然后再依據(jù) 其中包含的偏移值,直接從數(shù)據(jù)文件中定位到目標(biāo)記錄。
2. 按照HASH算法存儲(chǔ)索引
3索引文件中對(duì)索引的存儲(chǔ)不是按照順序緊湊的方法,而是通過(guò)
HASH算法把記錄的key轉(zhuǎn)化為數(shù)值,作為存儲(chǔ)該索引的位置偏移量。 任何HASH算法都存在沖突的問(wèn)題,即不同的key可能會(huì)轉(zhuǎn)化出相同的 位置偏移量,因此本次索引要存儲(chǔ)的位置可能已被以前的索引占據(jù)。 可以采取最簡(jiǎn)單的策略解決,即從該沖突位置向后查找第一個(gè)空白位 置,進(jìn)行存儲(chǔ)。實(shí)現(xiàn)時(shí)不限于該策略。
根據(jù)上述技術(shù),本發(fā)明提供的文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù)包括數(shù)據(jù) 存儲(chǔ)和數(shù)據(jù)查詢兩個(gè)步驟,其中,
數(shù)據(jù)存儲(chǔ)包括如下步驟
1-1)查找數(shù)據(jù)文件空白位置存儲(chǔ)數(shù)據(jù),數(shù)據(jù)包括鍵(key)和值 (data)兩部分,鍵是查詢數(shù)據(jù)的關(guān)鍵字,將鍵和值組成名值對(duì)結(jié)構(gòu), 作為存儲(chǔ)記錄,將記錄存入數(shù)據(jù)文件中的空白位置,該位置標(biāo)記為 data_pos i t ion;
1-2) HASH轉(zhuǎn)換產(chǎn)生索引存儲(chǔ)位置,以數(shù)據(jù)的鍵(key)為參數(shù), 調(diào)用HASH函數(shù),轉(zhuǎn)換為一個(gè)數(shù)值,作為索引存儲(chǔ)位置,該位置標(biāo)記為 index_pos i t ion;
1- 3)在索引文件中存儲(chǔ)索引,索引包括兩部分,數(shù)據(jù)的鍵(key) 以及1-1 )步中獲得的data — position,打開(kāi)索引文件,以l-2)步產(chǎn) 生的index_position為偏移量,將索引存儲(chǔ)到該位置;如果該位置已 經(jīng)被占用,則從該位置起向后查找第一個(gè)空白位置進(jìn)行存儲(chǔ);
數(shù)據(jù)查詢包括如下步驟
2- 1) HASH轉(zhuǎn)換計(jì)算出索引的存儲(chǔ)位置,以數(shù)據(jù)的鍵(key)為參 數(shù),調(diào)用HASH函數(shù),轉(zhuǎn)換結(jié)果即為索引存儲(chǔ)位置;
2_2)從索引文件取出索引,打開(kāi)索引文件,從2-l)步獲得的存 儲(chǔ)位置開(kāi)始,向后逐個(gè)匹配key,查找目標(biāo)索引(多數(shù)情況下,首個(gè) 就是匹配的索引);
2-3)從數(shù)據(jù)文件中取出數(shù)據(jù),2-2)步獲得的索引信息,包含查 詢數(shù)據(jù)在數(shù)據(jù)文件中的存儲(chǔ)位置,故打開(kāi)數(shù)據(jù)文件,按上述位置直接 取出數(shù)據(jù)。
本發(fā)明提供的文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù)具有如下優(yōu)點(diǎn) l.顯著提高查詢性能
通過(guò)HASH算法,可以從索引文件中快速定位到索引信息,進(jìn)而通 過(guò)索引信息直接獲得數(shù)據(jù)的存儲(chǔ)位置。因此,相對(duì)于傳統(tǒng)的文件數(shù)據(jù) 庫(kù)的遍歷查找機(jī)制,本機(jī)制定位目標(biāo)數(shù)據(jù)的速度明顯提高。2.保證數(shù)據(jù)文件存儲(chǔ)空間的利用率
本機(jī)制把索引信息和數(shù)據(jù)信息分開(kāi)存儲(chǔ)。用于存儲(chǔ)數(shù)據(jù)信息的數(shù) 據(jù)文件,仍然按傳統(tǒng)方法緊湊存儲(chǔ),因此數(shù)據(jù)文件的內(nèi)部空間可以充
分利用;用于存儲(chǔ)索引信息的索引文件,各索引存儲(chǔ)的位置是用HASH 函數(shù)產(chǎn)生的,雖然不是緊湊存儲(chǔ),中間存在一定的空白記錄區(qū),但是 索引的長(zhǎng)度相對(duì)較小,因此空白區(qū)的消耗相對(duì)不明顯。索引文件在存 儲(chǔ)利用率上付出一定的代價(jià),換取了查詢的高效率。
圖l為本發(fā)明實(shí)施例中數(shù)據(jù)存儲(chǔ)的流程圖; 圖2為本發(fā)明實(shí)施例中數(shù)據(jù)查詢的流程圖; 圖3為本發(fā)明實(shí)施例中文件數(shù)據(jù)庫(kù)多級(jí)索引示意圖; 圖4為本發(fā)明實(shí)施例中多級(jí)索引文件數(shù)據(jù)庫(kù)實(shí)施例流程圖。
具體實(shí)施例方式
一種文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù),其過(guò)程如圖3所示,包括數(shù)據(jù)存 儲(chǔ)和數(shù)據(jù)查詢兩個(gè)步驟,其中,
如圖l所示,數(shù)據(jù)存儲(chǔ)包括如下步驟 步驟開(kāi)始于1Q1:存儲(chǔ)過(guò)程開(kāi)始。
然后進(jìn)入步驟102:查找數(shù)據(jù)文件空白位置存儲(chǔ)數(shù)據(jù),數(shù)據(jù)包括 鍵(key)和值(data)兩部分,鍵是查詢數(shù)據(jù)的關(guān)鍵字,將鍵和值組 成名值對(duì)結(jié)構(gòu),作為存儲(chǔ)記錄,將記錄存入數(shù)據(jù)文件中的空白位置, 該位置標(biāo)記為data —pos i t ion。
再進(jìn)入步驟103: HASH轉(zhuǎn)換產(chǎn)生索引存儲(chǔ)位置,以數(shù)據(jù)的鍵(key ) 為參數(shù),調(diào)用HASH函數(shù),轉(zhuǎn)換為一個(gè)數(shù)值,作為索引存儲(chǔ)位置,該位 置標(biāo)記為index —pos i t ion。
然后再進(jìn)入步驟104:在索引文件中存儲(chǔ)索引,索引包括兩部分, 數(shù)據(jù)的鍵(key)以及步驟102步中獲得的da ta —pos i t ion,打開(kāi)索引 文件,以步驟103中產(chǎn)生的index-position為偏移量,將索引存儲(chǔ)到 該位置;如果該位置已經(jīng)被占用,則從該位置起向后查找第一個(gè)空白 位置進(jìn)行存儲(chǔ)。
然后為步驟105:存儲(chǔ)過(guò)程結(jié)束。
如圖2所示,數(shù)據(jù)查詢包括如下步驟
步驟開(kāi)始于2Q1:查詢過(guò)程開(kāi)始。
然后進(jìn)入步驟202: HASH轉(zhuǎn)換計(jì)算出索引的存儲(chǔ)位置,以數(shù)據(jù)的 鍵(key)為參數(shù),調(diào)用HASH函數(shù),轉(zhuǎn)換結(jié)果即為索引存儲(chǔ)位置;然后進(jìn)入步驟203:從索引文件取出索引,打開(kāi)索引文件,從步 驟202中獲得的存儲(chǔ)位置開(kāi)始,向后逐個(gè)匹配key,查找目標(biāo)索引(多 數(shù)情況下,首個(gè)就是匹配的索引)。
然后進(jìn)入步驟204:從數(shù)據(jù)文件中取出數(shù)據(jù),步驟203獲得的索 引信息,包含查詢數(shù)據(jù)在數(shù)據(jù)文件中的存儲(chǔ)位置,故打開(kāi)數(shù)據(jù)文件, 按上述位置直接取出數(shù)據(jù)。
最后為步驟205:查詢過(guò)程結(jié)束。
為了更清晰的描述上述多級(jí)索引文件數(shù)據(jù)庫(kù)的實(shí)現(xiàn),如圖4所示, 以下用 一個(gè)簡(jiǎn)單的人員信息數(shù)據(jù)庫(kù)為例說(shuō)明存儲(chǔ)人員名字(key)和地 址(data)信息,可以方便的按名字查出他的地址。本例中假定人名不 重復(fù)。
名字用8字節(jié)固定長(zhǎng)度存儲(chǔ),地址用128字節(jié)固定長(zhǎng)度存儲(chǔ),名 字和地址組成數(shù)據(jù)記錄,存儲(chǔ)到數(shù)據(jù)文件中,因而數(shù)據(jù)文件中存儲(chǔ)的 記錄長(zhǎng)度是136字節(jié)(名字+地址)。
相應(yīng)的,索引文件中的記錄由名字和偏移量組成,偏移量是4字 節(jié)整數(shù)型,因此索引記錄長(zhǎng)度12字節(jié)(名字+偏移量)。
存儲(chǔ)"張三"及他的地址"長(zhǎng)安街44號(hào)"這條信息時(shí),
(1) 從數(shù)據(jù)文件中找到第一個(gè)空白記錄位置,假定該空白位置相對(duì) 于數(shù)據(jù)文件開(kāi)頭的距離是3條記錄的長(zhǎng)度。偏移以數(shù)據(jù)記錄長(zhǎng)度為單 位,偏移量標(biāo)記為3。
(2) 打開(kāi)數(shù)據(jù)文件,把名字"張三"和地址"長(zhǎng)安街44號(hào)"組成 的數(shù)據(jù)記錄存入第3條記錄處。
(3) 以名字"張三"和偏移量3,作為索引記錄。
(4) 以名字"張三,,作為參數(shù),調(diào)用HASH函數(shù),假定返回值為25, 就以25作為索引記錄在索引文件中存儲(chǔ)的位置。以索引文件開(kāi)頭為基 準(zhǔn),向后偏移25條索引記錄的長(zhǎng)度。如果找到的位置尚未使用,把第 (3)步的索引記錄直接存儲(chǔ)到該位置;如果該位置已經(jīng)使用,從該位置 開(kāi)始向后順序找到第 一個(gè)空白位置,對(duì)索引記錄進(jìn)行存儲(chǔ)。
查詢"張三"的地址信息時(shí),
(1) 把名字"張三"作為參數(shù),調(diào)用HASH函數(shù),可以得到返回值 25 , 25可以定位索引記錄在索引文件中存儲(chǔ)的起始位置。
(2) 以索引文件開(kāi)頭為基準(zhǔn),向后偏移25條索引記錄的長(zhǎng)度。偏 移后地址不一定就是索引記錄的直接存儲(chǔ)位置,應(yīng)當(dāng)從該位置開(kāi)始, 逐個(gè)查找名字是"張三,,的索引記錄。找到后,取出其中的偏移量,值是3。
(3) 打開(kāi)數(shù)據(jù)文件,定位數(shù)據(jù)記錄的直接存儲(chǔ)地址。由(2)可知, 該地址距離數(shù)據(jù)文件開(kāi)頭3條記錄長(zhǎng)度。
(4) 從第(3)步得到的地址中取出數(shù)據(jù)記錄,該記錄的數(shù)據(jù)部分存 儲(chǔ)的就是"張三"的地址。
權(quán)利要求
1.一種文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù),其特征在于包括數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢兩個(gè)步驟,其中,數(shù)據(jù)存儲(chǔ)包括如下步驟1-1)查找數(shù)據(jù)文件空白位置存儲(chǔ)數(shù)據(jù),數(shù)據(jù)包括鍵(key)和值(data)兩部分,鍵是查詢數(shù)據(jù)的關(guān)鍵字,將鍵和值組成名值對(duì)結(jié)構(gòu),作為存儲(chǔ)記錄,將記錄存入數(shù)據(jù)文件中的空白位置,該位置標(biāo)記為data_position;1-2)HASH轉(zhuǎn)換產(chǎn)生索引存儲(chǔ)位置,以數(shù)據(jù)的鍵(key)為參數(shù),調(diào)用HASH函數(shù),轉(zhuǎn)換為一個(gè)數(shù)值,作為索引存儲(chǔ)位置,該位置標(biāo)記為index_position;1-3)在索引文件中存儲(chǔ)索引,索引包括兩部分?jǐn)?shù)據(jù)的鍵(key)以及1-1)步中獲得的data_position,打開(kāi)索引文件,以1-2)步產(chǎn)生的index_position為偏移量,將索引存儲(chǔ)到該位置;如果該位置已經(jīng)被占用,則從該位置起向后查找第一個(gè)空白位置進(jìn)行存儲(chǔ);數(shù)據(jù)查詢包括如下步驟2-1)HASH轉(zhuǎn)換計(jì)算出索引的存儲(chǔ)位置,以數(shù)據(jù)的鍵(key)為參數(shù),調(diào)用HASH函數(shù),轉(zhuǎn)換結(jié)果即為索引存儲(chǔ)位置;2-2)從索引文件取出索引,打開(kāi)索引文件,從2-1)步獲得的存儲(chǔ)位置開(kāi)始,向后逐個(gè)匹配key,查找目標(biāo)索引(多數(shù)情況下,首個(gè)就是匹配的索引);2-3)從數(shù)據(jù)文件中取出數(shù)據(jù),2-2)步獲得的索引信息,包含查詢數(shù)據(jù)在數(shù)據(jù)文件中的存儲(chǔ)位置,故打開(kāi)數(shù)據(jù)文件,按上述位置直接取出數(shù)據(jù)。
全文摘要
本發(fā)明是一種文件數(shù)據(jù)庫(kù)多級(jí)索引技術(shù),即InforGuard水印模塊采用的水印存取機(jī)制。它包括數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢兩個(gè)步驟,通過(guò)建立獨(dú)立的索引文件并按照HASH算法存儲(chǔ)索引,通過(guò)兩階段快速定位的多級(jí)索引技術(shù),克服傳統(tǒng)文件數(shù)據(jù)庫(kù)效率低下的弱點(diǎn),顯著提高了文件數(shù)據(jù)庫(kù)查詢數(shù)據(jù)的性能。
文檔編號(hào)G06F17/30GK101551807SQ20091001510
公開(kāi)日2009年10月7日 申請(qǐng)日期2009年5月7日 優(yōu)先權(quán)日2009年5月7日
發(fā)明者春 劉, 劉宗福, 劉毅楓, 進(jìn) 王, 磊 石, 黃三偉 申請(qǐng)人:山東中創(chuàng)軟件商用中間件股份有限公司