本發(fā)明屬于數(shù)據(jù)索引領(lǐng)域,尤其涉及到一種基于檢索信息投影的網(wǎng)絡(luò)會(huì)話包索引方法。
背景技術(shù):
目前的索引基本基于四元組作為KEY來(lái)建立索引,在海量數(shù)據(jù)流量下,HASH表的處理性能和容量無(wú)法滿足。目前主流的HASH處理極限規(guī)模在1000萬(wàn)左右,而且索引塊占用的內(nèi)存大小不固定,隨著數(shù)據(jù)量的增大而增大,無(wú)法預(yù)先分配固定的內(nèi)存,需要承受頻繁和無(wú)效的內(nèi)存申請(qǐng)釋放。
技術(shù)實(shí)現(xiàn)要素:
為解決上述問(wèn)題,本發(fā)明提供了一種基于檢索信息投影的網(wǎng)絡(luò)會(huì)話包索引方法,包括如下步驟:
步驟1:預(yù)先指定至少一個(gè)用于存儲(chǔ)網(wǎng)絡(luò)會(huì)話包某種信息的檢索信息的索引空間,所述索引空間內(nèi)具有若干存儲(chǔ)位,一個(gè)存儲(chǔ)位對(duì)應(yīng)一種檢索信息,各個(gè)存儲(chǔ)位具有相同的初始值。
步驟2:提取出指定網(wǎng)絡(luò)會(huì)話包的某種或者某幾種信息,確定各種信息對(duì)應(yīng)的索引空間及索引空間大小。
步驟3:將各個(gè)網(wǎng)絡(luò)會(huì)話包的各個(gè)信息分別進(jìn)行Hash運(yùn)算后進(jìn)行投影映射。
每個(gè)信息的Hash運(yùn)算包括如下步驟:
步驟3.1:提取出信息的參數(shù)。
步驟3.2:將參數(shù)作為Hash的輸入值進(jìn)行運(yùn)算,得到散列值。
步驟3.3:將散列值除以該種信息對(duì)應(yīng)的索引空間大小進(jìn)行取余,得到余值。
步驟3.4:檢索信息投影模塊將該信息映射到對(duì)應(yīng)索引空間中位號(hào)為余值的存儲(chǔ)位,所述余值就作為該信息的索引信息,被映射的存儲(chǔ)位被標(biāo)記為已投影。
進(jìn)一步的,還包括將將時(shí)間分為若干時(shí)間周期層的流程,具體為:將時(shí)間劃分為若干按時(shí)間先后排列的、長(zhǎng)度相同的時(shí)間單元,每個(gè)時(shí)間單元再被劃分為若干時(shí)間先后排列的、長(zhǎng)度相同的時(shí)間單元以形成下一時(shí)間周期層,如此循環(huán)劃分,直到達(dá)到預(yù)定的最小時(shí)間單元。
進(jìn)一步的,在整個(gè)方法的執(zhí)行過(guò)程中,還有存儲(chǔ)值情況記錄流程,具體為:按照預(yù)定周期循環(huán)記錄各個(gè)索引空間所有存儲(chǔ)位的存儲(chǔ)值情況,并將各個(gè)記錄時(shí)刻對(duì)應(yīng)到各個(gè)時(shí)間周期層對(duì)應(yīng)的時(shí)間單元內(nèi)。
進(jìn)一步的,步驟3之后還包括讀取流程,所述讀取流程具體為:
步驟4.1:預(yù)先給定欲讀取的網(wǎng)絡(luò)會(huì)話流的某種或者某幾種信息。
步驟4.2:信息壓縮模塊將步驟4.1中的信息逐個(gè)進(jìn)行壓縮運(yùn)算后得到對(duì)應(yīng)的檢索信息。
步驟4.3:讀取模塊根據(jù)檢索信息,找到對(duì)應(yīng)的存儲(chǔ)位,進(jìn)而尋找對(duì)應(yīng)的網(wǎng)絡(luò)會(huì)話包。
進(jìn)一步的,步驟4.3具體為:
步驟4.3.1:將時(shí)間單元長(zhǎng)度最長(zhǎng)的時(shí)間周期層作為第一層時(shí)間周期層,系統(tǒng)從第一層時(shí)間周期層預(yù)先選定的時(shí)間單元開(kāi)始讀取各個(gè)檢索信息對(duì)應(yīng)的存儲(chǔ)位是否均被標(biāo)記為已投影,如是鎖定該時(shí)間單元,并執(zhí)行下一步,如否則遍歷讀取第一層時(shí)間周期層其他時(shí)間單元內(nèi)各個(gè)檢索信息對(duì)應(yīng)的存儲(chǔ)位,直到能夠鎖定存儲(chǔ)位均被標(biāo)記為已投影的時(shí)間單元,如遍歷后仍不能鎖定則結(jié)束讀取流程。
步驟4.3.2:系統(tǒng)開(kāi)始從被鎖定時(shí)間單元被劃分的下一時(shí)間周期層的各個(gè)時(shí)間單元中遍歷尋找各個(gè)檢索信息對(duì)應(yīng)的存儲(chǔ)位均被標(biāo)記為已投影的時(shí)間單元,并鎖定該時(shí)間單元。
步驟4.3.3:重復(fù)進(jìn)行步驟4.3.2,直到鎖定時(shí)間單元最短的時(shí)間周期層的對(duì)應(yīng)時(shí)間單元。
步驟4.3.4:讀取最后一次鎖定的時(shí)間單元內(nèi)的網(wǎng)絡(luò)會(huì)話流,提取出滿足要求的網(wǎng)絡(luò)會(huì)話流。
進(jìn)一步的,各個(gè)存儲(chǔ)位的原始值為0,被標(biāo)記為已投影后變?yōu)?。
進(jìn)一步的,網(wǎng)絡(luò)會(huì)話包的信息種類包括IP地址信息和/端口號(hào)信息和/或網(wǎng)協(xié)議ID號(hào)信息。
進(jìn)一步的,步驟3.2中,如果是IP地址進(jìn)行壓縮運(yùn)算,則將其各個(gè)字節(jié)獨(dú)立的作為Hash的輸入?yún)?shù)。
進(jìn)一步的,步驟3.2中,如果是對(duì)端口號(hào)進(jìn)行壓縮運(yùn)算,則將其各個(gè)字節(jié)獨(dú)立的作為Hash的輸入?yún)?shù)。
進(jìn)一步的,步驟3.3中,索引空間大小對(duì)應(yīng)的位的個(gè)數(shù)為取余運(yùn)算式的分母。
本發(fā)明的有益效果為:
本發(fā)明通過(guò)定義了一種新型的索引技術(shù)-投影索引,能將索引的處理規(guī)模提升到無(wú)限大,并能夠高速地寫(xiě)入和查詢,并且對(duì)于兩個(gè)或者多個(gè)索引合并成更高層的索引時(shí)幾乎也是0成本。本發(fā)明的投影索引因?yàn)轶w積小,因此可以常駐內(nèi)存,省去硬盤(pán)IO的成本,并且也是位運(yùn)算,寫(xiě)入和讀取的成本基本趨近于0,但可以極大地提升性能。
附圖說(shuō)明
圖1為存儲(chǔ)流程示意圖。
圖2為讀取流程示意圖。
具體實(shí)施方式
在介紹本發(fā)明所述方法前,先對(duì)本發(fā)明所對(duì)應(yīng)的系統(tǒng)進(jìn)行說(shuō)明、該系統(tǒng)包括至少一個(gè)用于存儲(chǔ)網(wǎng)絡(luò)會(huì)話包某種信息的檢索信息的索引空間、信息壓縮模塊、檢索信息投影模塊、讀取模塊。
所述索引空間內(nèi)具有若干存儲(chǔ)位,一個(gè)存儲(chǔ)位對(duì)應(yīng)一種檢索信息,各個(gè)存儲(chǔ)位具有相同的初始值。
所述信息壓縮模塊用于將指定網(wǎng)絡(luò)會(huì)話包的某種或者某幾種信息進(jìn)行壓縮運(yùn)算得到各信息對(duì)應(yīng)的檢索信息。
檢索信息投影模塊,用于網(wǎng)絡(luò)會(huì)話包的相關(guān)信息投影映射到存儲(chǔ)該種信息的檢索信息的索引空間的對(duì)應(yīng)存儲(chǔ)位,被投影的存儲(chǔ)位在第一次被投影時(shí)被標(biāo)記為已投影;具有相同檢索信息的網(wǎng)絡(luò)會(huì)話包的相關(guān)信息均投影映射同一個(gè)存儲(chǔ)位。
所述讀取模塊用于根據(jù)欲讀取網(wǎng)絡(luò)會(huì)話包的某種或者某幾種信息對(duì)應(yīng)的檢索信息,找到對(duì)應(yīng)的存儲(chǔ)位,進(jìn)而找到對(duì)應(yīng)的網(wǎng)絡(luò)會(huì)話包。
進(jìn)一步的,所述檢索信息投影模塊還將時(shí)間分為若干時(shí)間周期層,每個(gè)時(shí)間周期層將時(shí)間劃分為若干按時(shí)間先后排列的、長(zhǎng)度相同的時(shí)間單元,每個(gè)時(shí)間單元再被劃分為若干時(shí)間先后排列的、長(zhǎng)度相同的時(shí)間單元以形成下一時(shí)間周期層,如此循環(huán)劃分,直到達(dá)到預(yù)定的最小時(shí)間單元,檢索信息投影模塊按照預(yù)定周期循環(huán)記錄各個(gè)索引空間所有存儲(chǔ)位的存儲(chǔ)值情況,并將各個(gè)記錄時(shí)刻對(duì)應(yīng)到各個(gè)時(shí)間周期層對(duì)應(yīng)的時(shí)間單元內(nèi)。舉例:第一層時(shí)間周期層的時(shí)間單元長(zhǎng)度為1天,1天再劃分為整數(shù)個(gè)小時(shí)長(zhǎng)度的時(shí)間單元,每個(gè)小時(shí)再被劃分為整數(shù)分鐘長(zhǎng)度的時(shí)間單元,每分鐘長(zhǎng)度的時(shí)間單元再被劃分為整數(shù)秒長(zhǎng)度的時(shí)間單元。應(yīng)當(dāng)理解,具體時(shí)間單元長(zhǎng)度的取值根據(jù)實(shí)際情況自行確定。本實(shí)施例優(yōu)選將24小時(shí)作為最長(zhǎng)的時(shí)間單元,以使查詢能夠精確到日期。
所述網(wǎng)絡(luò)會(huì)話包的信息種類包括IP地址信息和/端口號(hào)信息和/或網(wǎng)協(xié)議ID號(hào)信息。當(dāng)然,并不局限于此,還可以進(jìn)行信息種類擴(kuò)展。
信息壓縮模塊將指定網(wǎng)絡(luò)會(huì)包某種信息進(jìn)行壓縮運(yùn)算以得到檢索信息的方法為:
步驟一:將該種信息的參數(shù)作為Hash函數(shù)的輸入?yún)?shù)進(jìn)行Hash運(yùn)算得到散列值。
步驟二:將散列值除以該種信息對(duì)應(yīng)索引空間的大小進(jìn)行取余,得到的余值即為檢索信息。
舉例,假設(shè)存儲(chǔ)IP地址信息的索引空間具有N MB的空間。假設(shè)IP地址四個(gè)字節(jié)為 IP1,IP2,1P3,1P4(1個(gè)字節(jié)8位)。檢索信息為POS,則計(jì)算步驟為:
HashKey = HASH(IP1,1P2,1P3,1P4);
POS = HashKey % (N*1024*1024*8);
N*1024*1024*8的由來(lái)是:在信息進(jìn)行壓縮運(yùn)算以得到檢索信息的過(guò)程中,索引空間大小對(duì)應(yīng)的位的個(gè)數(shù)為取余運(yùn)算式的分母。
需要強(qiáng)調(diào)的是,檢索信息投影模塊將信息壓縮模塊中進(jìn)行Hash運(yùn)算的信息投影映射到對(duì)應(yīng)索引空間中位號(hào)為其余值的存儲(chǔ)位。不同網(wǎng)絡(luò)會(huì)話包的相同信息可能計(jì)算出來(lái)的存儲(chǔ)位相同,那么這些信息就就屬于同一種信息,都投影映射到了相同的存儲(chǔ)位,極大的節(jié)省了索引空間大小。如果索引空間較大,則一個(gè)存儲(chǔ)位對(duì)應(yīng)較少的同種信息,信息分類更細(xì),如果索引空間較小,則存儲(chǔ)位對(duì)應(yīng)較多的同種信息,信息分類更加粗略。總之,該種設(shè)計(jì)能適應(yīng)任意大小的索引空間。
下面對(duì)本發(fā)明所述工作方法進(jìn)行說(shuō)明。工作方法可分為時(shí)間分為若干時(shí)間周期層的流程、存儲(chǔ)流程、存儲(chǔ)值情況記錄流程、讀取流程。
時(shí)間分為若干時(shí)間周期層的流程具體為:每個(gè)時(shí)間周期層將時(shí)間劃分為若干按時(shí)間先后排列的、長(zhǎng)度相同的時(shí)間單元,每個(gè)時(shí)間單元再被劃分為若干時(shí)間先后排列的、長(zhǎng)度相同的時(shí)間單元以形成下一時(shí)間周期層,如此循環(huán)劃分,直到達(dá)到預(yù)定的最小時(shí)間單元,檢索信息投影模塊按照預(yù)定周期循環(huán)記錄各個(gè)索引空間所有存儲(chǔ)位的存儲(chǔ)值情況,并將各個(gè)記錄時(shí)刻對(duì)應(yīng)到各個(gè)時(shí)間周期層對(duì)應(yīng)的時(shí)間單元內(nèi)。
如圖1所示,存儲(chǔ)流程包括如下步驟:
步驟1:預(yù)先指定至少一個(gè)用于存儲(chǔ)網(wǎng)絡(luò)會(huì)話包某種信息的檢索信息的索引空間,所述索引空間內(nèi)具有若干存儲(chǔ)位,一個(gè)存儲(chǔ)位對(duì)應(yīng)一種檢索信息,各個(gè)存儲(chǔ)位具有相同的初始值。
步驟2:提取出指定網(wǎng)絡(luò)會(huì)話包的某種或者某幾種信息,確定各種信息對(duì)應(yīng)的索引空間及索引空間大小。
步驟3:將各個(gè)網(wǎng)絡(luò)會(huì)話包的各個(gè)信息分別進(jìn)行Hash運(yùn)算后進(jìn)行投影映射。
每個(gè)信息的Hash運(yùn)算包括如下步驟:
步驟3.1:提取出信息的參數(shù)。
步驟3.2:將參數(shù)作為Hash的輸入值進(jìn)行運(yùn)算,得到散列值。
步驟3.3:將散列值除以該種信息對(duì)應(yīng)的索引空間大小進(jìn)行取余,得到余值。
步驟3.4:檢索信息投影模塊將該信息映射到對(duì)應(yīng)索引空間中位號(hào)為余值的存儲(chǔ)位,所述余值就作為該信息的索引信息,被映射的存儲(chǔ)位被標(biāo)記為已投影。
存儲(chǔ)值情況記錄流程,具體為:按照預(yù)定周期循環(huán)記錄各個(gè)索引空間所有存儲(chǔ)位的存儲(chǔ)值情況,并將各個(gè)記錄時(shí)刻對(duì)應(yīng)到各個(gè)時(shí)間周期層對(duì)應(yīng)的時(shí)間單元內(nèi)。
如圖2所示,讀取流程包括如下步驟:
步驟1:預(yù)先給定欲讀取的網(wǎng)絡(luò)會(huì)話流的某種或者某幾種信息。
步驟2:信息壓縮模塊將信息逐個(gè)進(jìn)行壓縮運(yùn)算后得到對(duì)應(yīng)的檢索信息。
步驟3:讀取模塊根據(jù)檢索信息,找到對(duì)應(yīng)的存儲(chǔ)位,進(jìn)而尋找對(duì)應(yīng)的網(wǎng)絡(luò)會(huì)話包。
步驟3具體為:
步驟3.1:將時(shí)間單元長(zhǎng)度最長(zhǎng)的時(shí)間周期層作為第一層時(shí)間周期層,系統(tǒng)從第一層時(shí)間周期層預(yù)先選定的時(shí)間單元開(kāi)始讀取各個(gè)檢索信息對(duì)應(yīng)的存儲(chǔ)位是否均被標(biāo)記為已投影,如是鎖定該時(shí)間單元,并執(zhí)行下一步,如否則遍歷讀取第一層時(shí)間周期層其他時(shí)間單元內(nèi)各個(gè)檢索信息對(duì)應(yīng)的存儲(chǔ)位,直到能夠鎖定存儲(chǔ)位均被標(biāo)記為已投影的時(shí)間單元,如遍歷后仍不能鎖定則結(jié)束讀取流程。
步驟3.2:系統(tǒng)開(kāi)始從被鎖定時(shí)間單元被劃分的下一時(shí)間周期層的各個(gè)時(shí)間單元中遍歷尋找各個(gè)檢索信息對(duì)應(yīng)的存儲(chǔ)位均被標(biāo)記為已投影的時(shí)間單元,并鎖定該時(shí)間單元。
步驟3.3:重復(fù)進(jìn)行步驟3.2,直到鎖定時(shí)間單元最短的時(shí)間周期層的對(duì)應(yīng)時(shí)間單元。
步驟3.4:讀取最后一次鎖定的時(shí)間單元內(nèi)的網(wǎng)絡(luò)會(huì)話流,提取出滿足要求的網(wǎng)絡(luò)會(huì)話流。