一種基于空間位圖模型的輔助索引方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)查詢優(yōu)化領(lǐng)域,特別涉及加速查詢的一種基于空間位圖模型的輔 助索引方法及系統(tǒng)。
【背景技術(shù)】
[0002] 隨著計算機網(wǎng)絡(luò)的快速發(fā)展,"大數(shù)據(jù)"吸引了越來越多的關(guān)注,如何能在龐大的 流式數(shù)據(jù)中快速,高效地查詢目標信息成為了熱門話題。為了達到這個目標,能否根據(jù)數(shù)據(jù) 的特點建立索引成為了關(guān)鍵問題。
[0003] 在某特定應(yīng)用場景中,服務(wù)器每天都會產(chǎn)生大量的系統(tǒng)日志、網(wǎng)絡(luò)數(shù)據(jù)等流式數(shù) 據(jù),這些數(shù)據(jù)按照時間分片的原則定時收集并以ID號遞增的方式為由收集的數(shù)據(jù)組成的 文件命名,同時這些文件有一定的存儲周期,例如某服務(wù)器收集產(chǎn)生的網(wǎng)絡(luò)數(shù)據(jù),每隔一小 時將收集到的數(shù)據(jù)集中在當前文件中,命名為ID ;然后將創(chuàng)建新的文件,命名為ID+1,繼續(xù) 收集數(shù)據(jù);如果存儲周期為3個月,則有效文件數(shù)為2160 (24*30*3 = 2160),當?shù)?161個 文件收集數(shù)據(jù)完畢后,將刪除第1個文件。
[0004] 如果要在這樣的情景中快速獲取相應(yīng)信息,可以采用這樣的方法:對產(chǎn)生的流式 數(shù)據(jù)文件實時更新倒排索引;在每次查詢時,能夠根據(jù)鍵來查找目標信息在哪些文件中; 過期的文件信息可以在更新索引時從索引信息中刪除。以位圖結(jié)構(gòu)為基礎(chǔ)的倒排索引能滿 足高效查詢,使用在基于內(nèi)存查詢數(shù)據(jù)信息的數(shù)據(jù)庫中可以做到實時更新,添加一些操作 可以保證過期日志信息刪除后還能正確索引,但是這樣的結(jié)構(gòu)隨著日志編號的增加,需要 不斷擴展位圖容量,從而耗費了巨大的內(nèi)存空間。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明所要解決的技術(shù)問題是提供一種不隨日志編號增加而擴展內(nèi)存使用空間 的基于空間位圖模型的輔助索引方法及系統(tǒng)。
[0006] 本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于空間位圖模型的輔助索引方 法,包括以下步驟:
[0007] 步驟1:從日志文件生產(chǎn)隊列里獲取當前的日志文件及其文件編號,并將該日志 文件從日志文件生產(chǎn)隊列中刪除,每個所述日志文件均包括多個關(guān)鍵字,獲取當前日志文 件中的所有關(guān)鍵字;
[0008] 步驟2 :如果當前日志文件中的所有的關(guān)鍵字均處理完畢,執(zhí)行步驟10,否則,從 未處理的關(guān)鍵字中選擇任一關(guān)鍵字作為當前關(guān)鍵字并執(zhí)行步驟3 ;
[0009] 步驟3 :對當前關(guān)鍵字做檢測,如果當前關(guān)鍵字沒有出現(xiàn)在索引數(shù)據(jù)庫中,執(zhí)行步 驟4,如果當前關(guān)鍵字出現(xiàn)在索引數(shù)據(jù)庫中、但上一次插入的文件編號小于索引范圍的起始 位,將當前關(guān)鍵字的索引信息從索引數(shù)據(jù)庫中刪除,執(zhí)行步驟4 ;否則,執(zhí)行步驟5 ;
[0010] 步驟4:重新在索引數(shù)據(jù)庫中為當前關(guān)鍵字申請索引空間,在索引空間中插入當 前關(guān)鍵字對應(yīng)的日志文件的文件編號、并記錄文件編號的偏移量,并在索引數(shù)據(jù)庫中記錄 當前插入索引空間的文件編號,執(zhí)行步驟2 ;
[0011] 步驟5:令用于記錄臨時有效文件范圍的臨時有效文件范圍指針指向當前關(guān)鍵字 的索引空間,如果當前關(guān)鍵字的索引空間中實際有效文件范圍小于索引空間的預(yù)定臨界 值,執(zhí)行步驟6,否則,執(zhí)行步驟7 ;
[0012] 步驟6 :將有效文件范圍內(nèi)的所有索引信息保存到臨時有效文件范圍中,執(zhí)行步驟7 ;
[0013] 步驟7:如果待置位的文件編號在索引范圍的起始位與插入索引空間的最大的文 件編號的范圍內(nèi),在臨時有效文件范圍內(nèi)查找待置位的文件編號的插入位置,利用順序后 移指針記錄查找到的插入位置及偏移量的信息,如果待置位的文件編號大于插入索引空間 的最大的文件編號,則直接將待置位的文件編號的偏移量賦值給順序后移指針,令插入索 引空間的最大的文件編號更新為待置位的文件編號;
[0014] 步驟8 :將臨時有效文件范圍指針與順序后移指針整合成新的索引空間的信息;
[0015] 步驟9:如果整合后的索引空間的信息里出現(xiàn)了三個關(guān)于偏移量的單增區(qū)間,則 刪除其中第一個形成的單增區(qū)間,保留最后兩個單增區(qū)間,執(zhí)行步驟2 ;
[0016] 步驟10:結(jié)束處理。
[0017]本發(fā)明的有益效果是:本發(fā)明能夠節(jié)省內(nèi)存空間,在置位率較低或者插入位置較 靠近最大更新位置時效率較高,并且能夠進行空間動態(tài)調(diào)整。
[0018]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。
[0019] 進一步,所述步驟4中還包括:令當前關(guān)鍵字的用于記錄最后一個置位位置的末 位索引指針和當前單增區(qū)間的用于記錄最靠近索引空間結(jié)束位的置位位置的末位索引指 針都指向新插入的偏移量的位置。
[0020] 進一步,在索引空間中插入當前關(guān)鍵字對應(yīng)的日志文件的文件編號具體為,在索 引空間中將表示文件編號的位進行置位。
[0021] 進一步,所述步驟5中的索引空間的預(yù)定臨界值為有效文件范圍與容量系數(shù)的乘 積。
[0022] 進一步,一種基于空間位圖模型的輔助索引系統(tǒng),包括獲取模塊、判斷模塊、檢測 模塊、插入模塊、指向模塊、保存模塊、記錄模塊、整合模塊、刪除模塊和結(jié)束模塊;
[0023]所述獲取模塊,用于從日志文件生產(chǎn)隊列里獲取當前的日志文件及其文件編號, 并將該日志文件從日志文件生產(chǎn)隊列中刪除,每個所述日志文件均包括多個關(guān)鍵字,獲取 當前日志文件中的所有關(guān)鍵字;
[0024]所述判斷模塊,用于如果當前日志文件中的所有的關(guān)鍵字均處理完畢,執(zhí)行結(jié)束 模塊,否則,從未處理的關(guān)鍵字中選擇任一關(guān)鍵字作為當前關(guān)鍵字并執(zhí)行檢測模塊;
[0025]所述檢測模塊,用于對當前關(guān)鍵字做檢測,如果當前關(guān)鍵字沒有出現(xiàn)在索引數(shù)據(jù) 庫中,執(zhí)行插入模塊,如果當前關(guān)鍵字出現(xiàn)在索引數(shù)據(jù)庫中、但上一次插入的文件編號小于 索引范圍的起始位,將當前關(guān)鍵字的索引信息從索引數(shù)據(jù)庫中刪除,執(zhí)行插入模塊;否則, 執(zhí)tx指向申吳塊;
[0026]所述插入模塊,用于重新在索引數(shù)據(jù)庫中為當前關(guān)鍵字申請索引空間,在索引空 間中插入當前關(guān)鍵字對應(yīng)的日志文件的文件編號、并記錄文件編號的偏移量,并在索引數(shù) 據(jù)庫中記錄當前插入索引空間的文件編號,執(zhí)行判斷模塊;
[0027] 所述指向模塊,用于令用于記錄臨時有效文件范圍的臨時有效文件范圍指針指向 當前關(guān)鍵字的索引空間,如果當前關(guān)鍵字的索引空間中實際有效文件范圍小于索引空間的 預(yù)定臨界值,執(zhí)行保存模塊,否則,執(zhí)行記錄模塊;
[0028] 所述保存模塊,用于將有效文件范圍內(nèi)的所有索引信息保存到臨時有效文件范圍 中,執(zhí)行記錄模塊;
[0029] 所述記錄模塊,用于如果待置位的文件編號在索引范圍的起始位與插入索引空間 的最大的文件編號的范圍內(nèi),在臨時有效文件范圍內(nèi)查找待置位的文件編號的插入位置, 利用順序后移指針記錄查找到的插入位置及偏移量的信息,如果待置位的文件編號大于插 入索引空間的最大的文件編號,則直接將待置位的文件編號的偏移量賦值給順序后移指 針,令插入索引空間的最大的文件編號更新為待置位的文件編號;
[0030] 所述整合模塊,用于將臨時有效文件范圍指針與順序后移指針整合成新的索引空 間的信息;
[0031] 所述刪除模塊,用于如果整合后的索引空間的信息里出現(xiàn)了三個關(guān)于偏移量的單 增區(qū)間,則刪除其中第一個形成的單增區(qū)間,保留最后兩個單增區(qū)間,執(zhí)行判斷模塊;
[0032] 所述結(jié)束模塊,用于結(jié)束處理。
[0033] 進一步,所述插入模塊中還包括:令當前關(guān)鍵字的用于記錄最后一個置位位置的 末位索引指針