一種網(wǎng)絡(luò)流量數(shù)據(jù)索引方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種網(wǎng)絡(luò)流量數(shù)據(jù)索引方法及系統(tǒng),方法包括:實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù);在內(nèi)存中通過對(duì)所述網(wǎng)絡(luò)流量數(shù)據(jù)的每個(gè)索引字段維護(hù)一棵位圖-字典樹來建立并存儲(chǔ)所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),進(jìn)而更新所述索引字段的索引結(jié)構(gòu);根據(jù)用戶的查詢請(qǐng)求來查詢所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu)從而獲得網(wǎng)絡(luò)流量數(shù)據(jù)的存儲(chǔ)位置信息,將該存儲(chǔ)位置信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。由此,提供一種能有效地支持實(shí)時(shí)高速流量記錄的索引建立工作的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法及系統(tǒng),即使在較小索引磁盤空間消耗的情況下,也能支持快速的索引查詢操作。
【專利說明】—種網(wǎng)絡(luò)流量數(shù)據(jù)索弓I方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)流量存儲(chǔ),特別涉及一種網(wǎng)絡(luò)流量數(shù)據(jù)索引方法及系統(tǒng)?!颈尘凹夹g(shù)】
[0002]隨著網(wǎng)絡(luò)應(yīng)用和用戶的增加,網(wǎng)絡(luò)流數(shù)據(jù)的規(guī)模越來越大,普通小型網(wǎng)絡(luò)或者校園規(guī)模的網(wǎng)絡(luò)流量帶寬都已經(jīng)到達(dá)1-1OGbps的速度,如此高速的網(wǎng)絡(luò)鏈路帶給網(wǎng)絡(luò)流量存儲(chǔ)與檢索系統(tǒng)巨大的挑戰(zhàn)。為了滿足網(wǎng)絡(luò)管理及網(wǎng)絡(luò)取證等需求,系統(tǒng)應(yīng)保證既能夠?qū)崟r(shí)存儲(chǔ)網(wǎng)絡(luò)數(shù)據(jù)流量,又可以在大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)集上進(jìn)行高效的檢索操作。例如,在網(wǎng)絡(luò)取證操作中,運(yùn)營(yíng)商需要使用能方便有效地掃描存儲(chǔ)的數(shù)據(jù)集的工具來檢測(cè)入侵活動(dòng)。當(dāng)前,網(wǎng)絡(luò)歷史流量大多采用以下兩種存儲(chǔ)方法:第一種是存儲(chǔ)流記錄,常見的流記錄采集、存儲(chǔ)方法有sFl0W、NetFl0W和IPFIX等,這些方法僅僅保存了粗略的網(wǎng)絡(luò)統(tǒng)計(jì)信息;另一種是存儲(chǔ)網(wǎng)絡(luò)的所有數(shù)據(jù)包,這些數(shù)據(jù)包不僅包含了頭部信息,而且也包含了部分甚至全部的載荷內(nèi)容。無論是存儲(chǔ)流記錄還是存儲(chǔ)數(shù)據(jù)包,如何快速的檢索這些流量數(shù)據(jù)是非常關(guān)鍵的。通常我們會(huì)對(duì)存儲(chǔ)的流量數(shù)據(jù)建立索引以滿足之后的查詢工作。在面對(duì)高速鏈路、大規(guī)模網(wǎng)絡(luò)和復(fù)雜多樣應(yīng)用時(shí),仍舊存在著大量的挑戰(zhàn)。網(wǎng)絡(luò)流量的索引方法必須支持高速的實(shí)時(shí)插入速度、快速的查詢響應(yīng)以及較小的存儲(chǔ)空間。
[0003]在流量索引方法的研究方面,目前主要有三種索引方法:哈希索引,多路搜索樹索引以及位圖索引方法:
[0004](I)哈希索引方法:網(wǎng)絡(luò)流量存儲(chǔ)系統(tǒng)Time-Machine就是采用這種索引方法。此方法在開始階段,每次記錄的插入只會(huì)消耗較小的CPU時(shí)間。但是隨著記錄數(shù)目的增加,由于哈希鏈沖突的不斷增加,之后的插入操作將會(huì)花費(fèi)大量的時(shí)間去查找哈希表中的對(duì)應(yīng)存儲(chǔ)位置。此外,由于哈希索引方法只支持單域的相等性查找,很難支持區(qū)間查找和多域組合查找。
[0005](2)多路搜索樹索引方法:許多傳統(tǒng)關(guān)系型數(shù)據(jù)庫都是采用多路搜索樹索引方法。但是由于多路搜索樹在插入和檢索過程中都需要采用二分查找操作去找到插入和檢索記錄的位置,而且如果采用傳統(tǒng)的方法索引的更新會(huì)帶來很多磁盤隨機(jī)讀寫操作。所以多路搜索樹并不能支持非??斓乃饕迦牒筒樵兯俣取?br>
[0006](3)位圖索引方法:位圖索引方法已經(jīng)在許多數(shù)據(jù)存儲(chǔ)領(lǐng)域廣泛使用。此方法被證實(shí)非常適用于海量只讀數(shù)據(jù)的索引和查詢工作。至今為止已經(jīng)存在使用位圖索引方法非常優(yōu)秀的數(shù)據(jù)庫,比如FastBit。但是由于位圖索引方法產(chǎn)生的索引文件非常巨大,盡管存在一些優(yōu)秀的索引壓縮編碼方法,但是對(duì)于磁盤存儲(chǔ)空間的消耗以及每次查詢從磁盤讀入索引文件的時(shí)間開銷都是一個(gè)不可避免的缺點(diǎn)。
[0007]由于上述方法在網(wǎng)絡(luò)流量的快速索引以及查詢方面存在著不同程度的缺點(diǎn),從而使得這些方法不能夠真正應(yīng)用于IOGbps及以上的高速鏈路環(huán)境中。上述情況迫切要求我們既能夠?qū)崟r(shí)地對(duì)高速鏈路環(huán)境下的網(wǎng)絡(luò)數(shù)據(jù)流量進(jìn)行存儲(chǔ),又能夠?qū)v史數(shù)據(jù)流量進(jìn)行快速查詢檢索。[0008]在現(xiàn)有技術(shù)中,如發(fā)明名稱為“一種海量歷史數(shù)據(jù)的存儲(chǔ)及索引方法”,該發(fā)明公開了一種海量歷史數(shù)據(jù)的存儲(chǔ)及索引方法,屬于實(shí)時(shí)歷史數(shù)據(jù)庫領(lǐng)域。該方法根據(jù)分布式文件系統(tǒng)將大文件進(jìn)行分塊存儲(chǔ)的特點(diǎn),給出了一種簡(jiǎn)單高效的海量歷史數(shù)據(jù)文件的存儲(chǔ)方法和一種高效的分布式索引機(jī)制。該存儲(chǔ)方法可以保證滿足當(dāng)前海量歷史數(shù)據(jù)文件的存儲(chǔ)要求,更保證具有在線擴(kuò)展的特性;索引機(jī)制可以實(shí)現(xiàn)對(duì)海量歷史數(shù)據(jù)的快速訪問,同時(shí)在系統(tǒng)進(jìn)行資源擴(kuò)展以后,即底層物理存儲(chǔ)發(fā)生變化時(shí),該索引在無需修改的情況下依舊可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的查找功能。但是該發(fā)明的方法更側(cè)重分布式的存儲(chǔ)和索引方法,用大文件分塊存儲(chǔ)來保證效率。而不是專注于索引算法本身的優(yōu)化,沒有針對(duì)海量網(wǎng)絡(luò)流量數(shù)據(jù)特征進(jìn)行優(yōu)化。
【發(fā)明內(nèi)容】
[0009]為了解決上述問題,本發(fā)明的目的在于,提供一種能有效地支持實(shí)時(shí)高速流量記錄的索引建立工作的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法及系統(tǒng),即使在較小索引磁盤空間消耗的情況下,也能支持快速的索引查詢操作。
[0010]為實(shí)現(xiàn)上述目的,本發(fā)明提出一種網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,包括下列步驟:
[0011]步驟1,實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù);
[0012]步驟2,所述網(wǎng)絡(luò)流量數(shù)據(jù)具有多個(gè)索引字段,在內(nèi)存中通過對(duì)所述索引字段維護(hù)位圖-字典樹來建立并存儲(chǔ)所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),對(duì)于所述索引字段按字節(jié)來劃分鍵值,通過使所述鍵值在所述位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn)、葉子節(jié)點(diǎn)的指針指向存儲(chǔ)位置鏈表來更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu);
[0013]步驟3,根據(jù)用戶的查詢請(qǐng)求查詢所述索引結(jié)構(gòu)從而獲得網(wǎng)絡(luò)流量數(shù)據(jù)的存儲(chǔ)位置信息,將該存儲(chǔ)位置信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。
[0014]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,在所述步驟2中,所述位圖-字典樹的高度等于所述索引字段的字節(jié)大小,對(duì)于所述索引字段按照每個(gè)字節(jié)一個(gè)鍵值來劃分,更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu)的方法具體為:
[0015]依次獲取所述索引字段對(duì)應(yīng)的鍵值,通過檢測(cè)所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為1,來判斷所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),若不具有孩子節(jié)點(diǎn),則分配一個(gè)新節(jié)點(diǎn),并使所述鍵值對(duì)應(yīng)的指針指向該新節(jié)點(diǎn),同時(shí)將該比特值置為1,以使所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),到達(dá)所述位圖-字典樹的葉子節(jié)點(diǎn)時(shí),使所述葉子節(jié)點(diǎn)對(duì)應(yīng)指針指向存儲(chǔ)位置鏈表,在該存儲(chǔ)位置鏈表中新增所述索引字段的存儲(chǔ)位置信息。
[0016]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,當(dāng)內(nèi)存中的所述索引結(jié)構(gòu)大于內(nèi)存閾值時(shí),將所述索引結(jié)構(gòu)存入磁盤,并在所述索引結(jié)構(gòu)中增加一條記錄并指向磁盤存儲(chǔ)的位置,同時(shí)在內(nèi)存中建立一個(gè)新的索引結(jié)構(gòu),用于處理后續(xù)的網(wǎng)絡(luò)流量數(shù)據(jù)。
[0017]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,將所述索引結(jié)構(gòu)存入磁盤的具體方式為,在磁盤中按照所述位圖-字典樹的層來存儲(chǔ)所述索引結(jié)構(gòu),且各層采用連續(xù)存儲(chǔ)方式。
[0018]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,將所述索引結(jié)構(gòu)存入磁盤的方法具體為,
[0019]對(duì)于所述位圖-字典樹的每個(gè)節(jié)點(diǎn),先存儲(chǔ)位圖結(jié)構(gòu),然后存儲(chǔ)一個(gè)文件偏移位置的數(shù)組,該數(shù)組示出所述位圖-字典樹的每個(gè)節(jié)點(diǎn)的各孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,而對(duì)于所述位圖-字典樹的每個(gè)葉子節(jié)點(diǎn),該數(shù)組示出每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)鏈表的存儲(chǔ)位置。
[0020]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,所述步驟3的查詢所述索引結(jié)構(gòu)的查詢過程為,
[0021]將查詢條件按照每個(gè)字節(jié)一個(gè)鍵值來劃分,其中最后一個(gè)鍵值為未知鍵值,依此獲取所述查詢條件的鍵值,通過讀取所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為I來獲取該根節(jié)點(diǎn)對(duì)應(yīng)孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,并讀取該位置上的位圖-字典樹節(jié)點(diǎn),否則返回查詢結(jié)果為空,到達(dá)最后一個(gè)鍵值的前一個(gè)鍵值時(shí),獲取其在位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的所有比特值為I的位,然后獲取該所有比特值為I的位的偏移位置,最后讀取這些偏移位置的葉子節(jié)點(diǎn)和其對(duì)應(yīng)的鏈表元素,并將鏈表元素進(jìn)行合并返回。
[0022]本發(fā)明還涉及一種網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,包括下列模塊:
[0023]網(wǎng)絡(luò)流量數(shù)據(jù)獲取模塊,用于通過網(wǎng)卡或板卡來實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù);
[0024]索引結(jié)構(gòu)維護(hù)模塊,所述網(wǎng)絡(luò)流量數(shù)據(jù)具有多個(gè)索引字段,該模塊用于在內(nèi)存中通過使所述索引字段維護(hù)位圖-字典樹來建立并存儲(chǔ)所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),對(duì)于所述索引字段按字節(jié)來劃分鍵值,通過使所述鍵值在所述位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn)、葉子節(jié)點(diǎn)的指針指向存儲(chǔ)位置鏈表來更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu);
[0025]查詢響應(yīng)模塊,用于根據(jù)用戶的查詢請(qǐng)求查詢所述索引結(jié)構(gòu)從而獲得網(wǎng)絡(luò)流量數(shù)據(jù)的存儲(chǔ)位置信息,將該存儲(chǔ)位置信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。
[0026]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,在所述索引結(jié)構(gòu)維護(hù)模塊中,所述位圖-字典樹的高度等于所述索引字段的字節(jié)大小,對(duì)于所述索引字段按照每個(gè)字節(jié)一個(gè)鍵值來劃分,更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu)的方法具體為:
[0027]依次獲取所述索引字段對(duì)應(yīng)的鍵值,通過檢測(cè)所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為1,來判斷所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),若不具有孩子節(jié)點(diǎn),則分配一個(gè)新節(jié)點(diǎn),并使所述鍵值對(duì)應(yīng)的指針指向該新節(jié)點(diǎn),同時(shí)將該比特值置為1,以使所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),到達(dá)所述位圖-字典樹的葉子節(jié)點(diǎn)時(shí),使所述葉子節(jié)點(diǎn)對(duì)應(yīng)指針指向存儲(chǔ)位置鏈表,在該存儲(chǔ)位置鏈表中新增所述索引字段的存儲(chǔ)位置信息。
[0028]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,當(dāng)內(nèi)存中的所述索引結(jié)構(gòu)大于內(nèi)存閾值時(shí),將所述索引結(jié)構(gòu)存入磁盤,并在所述索引結(jié)構(gòu)中增加一條記錄并指向磁盤存儲(chǔ)的位置,同時(shí)在內(nèi)存中建立一個(gè)新的索引結(jié)構(gòu),用于處理后續(xù)的網(wǎng)絡(luò)流量數(shù)據(jù)。
[0029]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,將所述索引結(jié)構(gòu)存入磁盤的具體方式為,在磁盤中按照所述位圖-字典樹的層來存儲(chǔ)所述索引結(jié)構(gòu),且各層采用連續(xù)存儲(chǔ)方式。[0030]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,將所述索引結(jié)構(gòu)存入磁盤的方法具體為,
[0031]對(duì)于所述位圖-字典樹的每個(gè)節(jié)點(diǎn),先存儲(chǔ)位圖結(jié)構(gòu),然后存儲(chǔ)一個(gè)文件偏移位置的數(shù)組,該數(shù)組示出所述位圖-字典樹的每個(gè)節(jié)點(diǎn)的各孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,而對(duì)于所述位圖-字典樹的每個(gè)葉子節(jié)點(diǎn),該數(shù)組示出每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)鏈表的存儲(chǔ)位置。
[0032]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,所述查詢響應(yīng)模塊的對(duì)存入磁盤的索引結(jié)構(gòu)進(jìn)行查詢的查詢過程為,
[0033]將查詢條件按照每個(gè)字節(jié)一個(gè)鍵值來劃分,其中最后一個(gè)鍵值為未知鍵值,依此獲取所述查詢條件的鍵值,通過讀取所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為I來獲取該根節(jié)點(diǎn)對(duì)應(yīng)孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,并讀取該位置上的位圖-字典樹節(jié)點(diǎn),否則返回查詢結(jié)果為空,到達(dá)最后一個(gè)鍵值的前一個(gè)鍵值時(shí),獲取其在位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的所有比特值為I的位,然后獲取該所有比特值為I的位的偏移位置,最后讀取這些偏移位置的葉子節(jié)點(diǎn)和其對(duì)應(yīng)的鏈表元素,并將鏈表元素進(jìn)行合并返回。
[0034]本發(fā)明的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法具有以下主要優(yōu)勢(shì):
[0035](I)實(shí)時(shí)索引記錄插入速度快:利用網(wǎng)絡(luò)流量索引字段的特征,本發(fā)明的索引方法對(duì)于每次索引結(jié)構(gòu)的更新操作最多花費(fèi)4次樹節(jié)點(diǎn)的訪問。
[0036](2)索引文件磁盤消耗小:索引文件大小和索引記錄數(shù)目成線性關(guān)系,并且比快速比特索引文件大小小一半左右。
[0037](3)查詢響應(yīng)快:由于查詢的索引可能存儲(chǔ)在內(nèi)存或磁盤上,對(duì)于內(nèi)存中的索引結(jié)構(gòu),查詢和插入操作一樣只需花費(fèi)4次對(duì)索引樹節(jié)點(diǎn)的訪問,對(duì)于磁盤上的索引結(jié)構(gòu),只需最多4次磁盤查找操作以及相關(guān)數(shù)據(jù)的讀取操作便能獲取索引信息,最后定為查詢結(jié)果數(shù)據(jù)的存儲(chǔ)位置。
[0038]總之本發(fā)明中提出的方法可以有效地支持實(shí)時(shí)高速流量記錄的索引建立工作,并在較小索引磁盤空間消耗的情況下,支持快速的索引查詢操作。
【專利附圖】
【附圖說明】
[0039]圖1是本發(fā)明的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法的索引結(jié)構(gòu)示意圖;
[0040]圖2是本發(fā)明的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法的索引文件磁盤存儲(chǔ)布局示意圖;
[0041]圖3是本發(fā)明的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法的查詢磁盤索引文件過程示意圖。
【具體實(shí)施方式】
[0042]不同于以往的索引方法,本發(fā)明通過深入挖掘網(wǎng)絡(luò)流量以及索引字段的特征,并利用這些特征提出相應(yīng)的索引方法,這樣可以有效地克服許多缺陷。通過深入挖掘的網(wǎng)絡(luò)流量以及索引字段特征如下:
[0043](I)由于網(wǎng)絡(luò)流量以及索引文件往往只用于查詢功能,也就是當(dāng)網(wǎng)絡(luò)流量數(shù)據(jù)和索引文件寫入到磁盤之后就不會(huì)再發(fā)生任何修改、更新操作。
[0044](2)網(wǎng)絡(luò)流量索引的字段一般只有六種:源IP地址,目的IP地址,源端口號(hào),目的端口號(hào),協(xié)議號(hào)以及時(shí)間戳。而以上幾種字段要么存在很強(qiáng)的局部性特征,要么其取值范圍分布在一個(gè)非常小的區(qū)間。由于IP地址和時(shí)間戳擁有共享公共前綴的特征,對(duì)于端口號(hào),協(xié)議號(hào)字段,它們的取值范圍非常小,最大只是O到65535之間。
[0045](3)網(wǎng)絡(luò)流量到達(dá)的速度非常迅速,這要求索引方法要支持非??斓膶?shí)時(shí)插入速度。
[0046]本發(fā)明的索引方法主要包括以下幾個(gè)功能模塊:
[0047](I)網(wǎng)絡(luò)流量數(shù)據(jù)獲取模塊:用于通過網(wǎng)卡或板卡實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù),即數(shù)據(jù)包或數(shù)據(jù)流記錄,并將捕獲的網(wǎng)絡(luò)流量數(shù)據(jù)交給索引結(jié)構(gòu)更新模塊,該模塊用于更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),如果需要存儲(chǔ)數(shù)據(jù)包記錄,則將數(shù)據(jù)包寫入磁盤,并在索引結(jié)構(gòu)中增加一條記錄并指向磁盤存儲(chǔ)的位置。
[0048](2)索引結(jié)構(gòu)維護(hù)模塊:該模塊用于實(shí)時(shí)維護(hù)這些網(wǎng)絡(luò)流量數(shù)據(jù)的到達(dá)以及維護(hù)它們磁盤的存儲(chǔ)信息。當(dāng)索引結(jié)構(gòu)大于內(nèi)存閾值時(shí),索引結(jié)構(gòu)就會(huì)被永久性存入磁盤,另一個(gè)新的索引結(jié)構(gòu)將處理后續(xù)到達(dá)記錄的索引插入操作。
[0049](3)查詢響應(yīng)模塊:索引的作用就是為了快速地檢索到存儲(chǔ)的歷史流量數(shù)據(jù)。該查詢響應(yīng)模塊功能主要負(fù)責(zé)接收用戶的查詢請(qǐng)求,并查詢內(nèi)存以及磁盤的索引結(jié)構(gòu),將查詢的網(wǎng)絡(luò)流量數(shù)據(jù)的磁盤存儲(chǔ)信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。
[0050]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖對(duì)本發(fā)明的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0051]本索引方法是基于字典樹與位圖結(jié)構(gòu)(簡(jiǎn)稱為位圖-字典樹)相結(jié)合來維護(hù)實(shí)時(shí)索引記錄的插入操作。其中字典樹中每個(gè)節(jié)點(diǎn)一般包括256個(gè)指針用于指向?qū)?yīng)的孩子節(jié)點(diǎn),而位圖結(jié)構(gòu)用于標(biāo)記哪些位置擁有孩子節(jié)點(diǎn),哪些位置沒有孩子節(jié)點(diǎn)。關(guān)于采用的索引結(jié)構(gòu)如附圖1所示。由于網(wǎng)絡(luò)流量數(shù)據(jù)的索引字段往往只有以下幾種:源IP地址,目的IP地址,源端口號(hào),目的端口號(hào),協(xié)議號(hào)以及時(shí)間戳。每當(dāng)新的網(wǎng)絡(luò)流量數(shù)據(jù)到達(dá),一方面將這些網(wǎng)絡(luò)流量數(shù)據(jù)信息寫入磁盤存儲(chǔ),另一方面解析這些網(wǎng)絡(luò)流量數(shù)據(jù)得到需要建立索引字段的值,從而更新這些字段的索引結(jié)構(gòu)。
[0052]在內(nèi)存中對(duì)于每個(gè)索引字段維護(hù)一顆位圖-字典樹來存儲(chǔ)這些索引信息,位圖-字典葉子節(jié)點(diǎn)會(huì)指向一些鏈表,分別表示滿足這些索引條件的所有記錄的磁盤存儲(chǔ)位置。由于位圖-字典樹中每個(gè)節(jié)點(diǎn)存儲(chǔ)256個(gè)指針,也就是一個(gè)字節(jié)的信息,那么該樹的高度等于該索引字段的字節(jié)大小。比如對(duì)于源IPv4地址來說,它的字節(jié)大小為4字節(jié),樹的高度也是4。每次從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑代表了該IPv4地址的值,如附圖1所示。假設(shè)到達(dá)的網(wǎng)絡(luò)流量數(shù)據(jù)的源IPv4地址為”10.24.0.8”,那么該地址首先被分為4個(gè)鍵值,每個(gè)字節(jié)一個(gè)鍵值,即{10,24,0,8}。那么對(duì)其更新的步驟如下:
[0053](I)首先檢測(cè)根節(jié)點(diǎn)的位圖中第10個(gè)比特的值,如果該比特值為I則表示根節(jié)點(diǎn)中第10個(gè)指針擁有一個(gè)真實(shí)的孩子節(jié)點(diǎn),則進(jìn)入第2步;如果該比特值為0,則表示根節(jié)點(diǎn)中第10個(gè)指針為空,則分配一個(gè)新的節(jié)點(diǎn),并將第10個(gè)指針指向這個(gè)新的節(jié)點(diǎn),同時(shí)將根節(jié)點(diǎn)中位圖的第10個(gè)比特值置為1,進(jìn)入第二步。
[0054](2)獲取對(duì)應(yīng)的鍵值,比如第二層節(jié)點(diǎn)鍵值為24,第三層節(jié)點(diǎn)鍵值為0,并執(zhí)行第I步中類似的操作直到葉子節(jié)點(diǎn),如果是葉子節(jié)點(diǎn),則在對(duì)應(yīng)指針指向的鏈表后面新增該記錄的磁盤存儲(chǔ)位置信息。
[0055]基于上述結(jié)構(gòu),可以快速地處理內(nèi)存中網(wǎng)絡(luò)流量索引的插入操作。但是由于內(nèi)存容量有限,隨著網(wǎng)絡(luò)數(shù)據(jù)包或流記錄數(shù)目的不斷增加,無法將這些索引信息一直存放在內(nèi)存當(dāng)中。需要每隔一段時(shí)間將內(nèi)存中的索引結(jié)構(gòu)導(dǎo)入到磁盤存儲(chǔ),然后內(nèi)存中新的位圖-字典樹結(jié)構(gòu)會(huì)負(fù)責(zé)后續(xù)記錄的索引工作。附圖2表示了將內(nèi)存索引結(jié)構(gòu)導(dǎo)入到磁盤存儲(chǔ)的示意圖。
[0056]附圖2中依舊采用IP地址字段作為例子,在內(nèi)存中該索引結(jié)構(gòu)位圖-字典樹的高度為4。位圖-字典樹在磁盤中是按層來存儲(chǔ)的,也就是說先存儲(chǔ)根節(jié)點(diǎn),然后存儲(chǔ)第二層的節(jié)點(diǎn),最后存儲(chǔ)葉子節(jié)點(diǎn)以及其指向的鏈表。對(duì)于每個(gè)位圖-字典樹節(jié)點(diǎn),會(huì)先存儲(chǔ)位圖結(jié)構(gòu),然后存儲(chǔ)一個(gè)文件偏移位置的數(shù)組,該數(shù)組表示了各個(gè)孩子節(jié)點(diǎn)在磁盤中存儲(chǔ)的位置。由于在內(nèi)存中位圖-字典樹節(jié)點(diǎn)中的部分指針是空指針,而在磁盤存儲(chǔ)過程中,只需存儲(chǔ)那些擁有孩子節(jié)點(diǎn)的指針位置,該指針位置代表了孩子節(jié)點(diǎn)存儲(chǔ)的磁盤位置。最后對(duì)于葉子節(jié)點(diǎn)來說,每個(gè)節(jié)點(diǎn)的數(shù)組元素存儲(chǔ)的是對(duì)應(yīng)鏈表的存儲(chǔ)位置。各層的連續(xù)存儲(chǔ)是為了在處理區(qū)間查詢時(shí)可以在磁盤上進(jìn)行順序讀操作,無需多余的磁盤查找操作,因?yàn)轫樞蜃x操作比查找操作要快很多。
[0057]擁有了內(nèi)存中的索引結(jié)構(gòu)和在磁盤永久存儲(chǔ)的索引文件,就可以進(jìn)行各種常用的網(wǎng)絡(luò)流量檢索查詢。本發(fā)明的索引方法支持以下幾種查詢:
[0058](I)單域查詢:可以對(duì)單個(gè)被索引的字段進(jìn)行查詢,查詢過程是直接檢索內(nèi)存中相應(yīng)字段索引結(jié)構(gòu)和磁盤中存儲(chǔ)的索引文件,然后得到滿足條件的鏈表,鏈表中元素代表查詢的記錄位置。單域查詢的例子為“source ip=10.24.0.8” ;
[0059](2)多域聯(lián)合查詢:可以對(duì)多個(gè)字段的組合進(jìn)行查詢,比如” sourceip=10.24.0.8and destination ip=220.11.8.8and source port=55555and destinationport=80”。多個(gè)域的組合查詢?cè)谔幚磉^程中被分隔成多個(gè)單域的查詢,最后對(duì)這些查詢的結(jié)果進(jìn)行求交集便得到了最后滿足條件的記錄存儲(chǔ)位置。
[0060](3)區(qū)間查詢:可以對(duì)一些字段進(jìn)行區(qū)間查詢,比如“timestamp froml00to200andsource ip=10.24.0.8”。由于在磁盤存儲(chǔ)位圖_字典結(jié)構(gòu)按每層連續(xù)存儲(chǔ),所以非常有利于區(qū)間查詢。
[0061](4)通配符查詢:由于網(wǎng)絡(luò)流量索引的一些特殊要求,支持一些字段的通配符查詢,比如“10.24.0.*”,其中代表了可以匹配任意值(在這里取值范圍:0到255)。對(duì)于通配符查詢可以等價(jià)轉(zhuǎn)化成為區(qū)間查詢,比如“ 10.24.0.* ”等價(jià)于“ 10.24.0.0 ”到“10.24.0.255”。
[0062]附圖3為從磁盤索引文件進(jìn)行查詢的過程示意圖。由于多域聯(lián)合查詢可以轉(zhuǎn)化為單域查詢?nèi)缓筮M(jìn)行處理。將以查詢所有源IP地址滿足“10.24.0.*”條件的記錄作為例子介紹查找的詳細(xì)過程。查詢條件“10.24.0.*”將依舊分成四個(gè)鍵值{10,24,0,*}。首先讀取磁盤索引文件的根節(jié)點(diǎn),并判斷其位圖中第10個(gè)比特的值,如果為1,則獲取其對(duì)應(yīng)孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,如附圖3中的偏移量208 ;如果為0,則表示沒有存在第一個(gè)字節(jié)值為10的鍵值,所以返回查詢結(jié)果為空。如果為1,找到了偏移位置208,則讀取該位置上的位圖-字典樹節(jié)點(diǎn),然后重復(fù)以上的過程。當(dāng)?shù)竭_(dá)第三層時(shí),由于第四層的鍵值為表示所有值都滿足,則讀取第三層對(duì)應(yīng)節(jié)點(diǎn)位圖結(jié)構(gòu)中所有比特值為I的位,然后獲得他們的偏移位置,最后讀取這些偏移位置的葉子節(jié)點(diǎn)和其對(duì)應(yīng)的鏈表元素,并將鏈表元素進(jìn)行合并返回。對(duì)于內(nèi)存中的索引結(jié)構(gòu),根據(jù)查詢的關(guān)鍵字在內(nèi)存中根據(jù)字典樹找到對(duì)應(yīng)的葉子節(jié)點(diǎn)并讀取滿足條件的記錄存儲(chǔ)位置返回。
[0063]對(duì)于本發(fā)明涉及的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其包括下列模塊:
[0064]網(wǎng)絡(luò)流量數(shù)據(jù)獲取模塊,用于通過網(wǎng)卡或板卡來實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù);
[0065]索引結(jié)構(gòu)維護(hù)模塊,所述網(wǎng)絡(luò)流量數(shù)據(jù)具有多個(gè)索引字段,該模塊用于在內(nèi)存中通過使所述索引字段維護(hù)位圖-字典樹來建立并存儲(chǔ)所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),對(duì)于所述索引字段按字節(jié)來劃分鍵值,通過使所述鍵值在所述位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn)、葉子節(jié)點(diǎn)的指針指向存儲(chǔ)位置鏈表來更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu);
[0066]查詢響應(yīng)模塊,用于根據(jù)用戶的查詢請(qǐng)求查詢所述索引結(jié)構(gòu)從而獲得網(wǎng)絡(luò)流量數(shù)據(jù)的存儲(chǔ)位置信息,將該存儲(chǔ)位置信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。
[0067]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其中,在所述索引結(jié)構(gòu)維護(hù)模塊中,所述位圖-字典樹的高度等于所述索引字段的字節(jié)大小,對(duì)于所述索引字段按照每個(gè)字節(jié)一個(gè)鍵值來劃分,更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu)的方法具體為:
[0068]依次獲取所述索引字段對(duì)應(yīng)的鍵值,通過檢測(cè)所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為1,來判斷所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),若不具有孩子節(jié)點(diǎn),則分配一個(gè)新節(jié)點(diǎn),并使所述鍵值對(duì)應(yīng)的指針指向該新節(jié)點(diǎn),同時(shí)將該比特值置為1,以使所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),到達(dá)所述位圖-字典樹的葉子節(jié)點(diǎn)時(shí),使所述葉子節(jié)點(diǎn)對(duì)應(yīng)指針指向存儲(chǔ)位置鏈表,在該存儲(chǔ)位置鏈表中新增所述索引字段的存儲(chǔ)位置信息。
[0069]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其中,當(dāng)內(nèi)存中的所述索引結(jié)構(gòu)大于內(nèi)存閾值時(shí),將所述索引結(jié)構(gòu)存入磁盤,并在所述索引結(jié)構(gòu)中增加一條記錄并指向磁盤存儲(chǔ)的位置,同時(shí)在內(nèi)存中建立一個(gè)新的索引結(jié)構(gòu),用于處理后續(xù)的網(wǎng)絡(luò)流量數(shù)據(jù)。
[0070]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其中,將所述索引結(jié)構(gòu)存入磁盤的具體方式為,在磁盤中按照所述位圖-字典樹的層來存儲(chǔ)所述索引結(jié)構(gòu),且各層采用連續(xù)存儲(chǔ)方式。
[0071]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其中,將所述索引結(jié)構(gòu)存入磁盤的方法具體為,
[0072]對(duì)于所述位圖-字典樹的每個(gè)節(jié)點(diǎn),先存儲(chǔ)位圖結(jié)構(gòu),然后存儲(chǔ)一個(gè)文件偏移位置的數(shù)組,該數(shù)組示出所述位圖-字典樹的每個(gè)節(jié)點(diǎn)的各孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,而對(duì)于所述位圖-字典樹的每個(gè)葉子節(jié)點(diǎn),該數(shù)組示出每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)鏈表的存儲(chǔ)位置。
[0073]本發(fā)明提出的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其中,所述查詢響應(yīng)模塊的對(duì)存入磁盤的索引結(jié)構(gòu)進(jìn)行查詢的查詢過程為,
[0074]將查詢條件按照每個(gè)字節(jié)一個(gè)鍵值來劃分,其中最后一個(gè)鍵值為未知鍵值,依此獲取所述查詢條件的鍵值,通過讀取所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為I來獲取該根節(jié)點(diǎn)對(duì)應(yīng)孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,并讀取該位置上的位圖-字典樹節(jié)點(diǎn),否則返回查詢結(jié)果為空,到達(dá)最后一個(gè)鍵值的前一個(gè)鍵值時(shí),獲取其在位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的所有比特值為I的位,然后獲取該所有比特值為I的位的偏移位置形成一個(gè)數(shù)組,最后讀取所有所述偏移位置的葉子節(jié)點(diǎn)和該葉子節(jié)點(diǎn)對(duì)應(yīng)的鏈表的元素,并將所述鏈表的元素進(jìn)行合并返回。
【權(quán)利要求】
1.一種網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,包括下列步驟: 步驟1,實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù); 步驟2,所述網(wǎng)絡(luò)流量數(shù)據(jù)具有多個(gè)索引字段,在內(nèi)存中通過使所述索引字段維護(hù)位圖-字典樹來建立并存儲(chǔ)所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),對(duì)于所述索引字段按字節(jié)來劃分鍵值,通過使所述鍵值在所述位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn)、葉子節(jié)點(diǎn)的指針指向存儲(chǔ)位置鏈表來更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu); 步驟3,根據(jù)用戶的查詢請(qǐng)求查詢所述索引結(jié)構(gòu)從而獲得網(wǎng)絡(luò)流量數(shù)據(jù)的存儲(chǔ)位置信息,將該存儲(chǔ)位置信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。
2.如權(quán)利要求1所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,在所述步驟2中,所述位圖-字典樹的高度等于所述索引字段的字節(jié)大小,對(duì)于所述索引字段按照每個(gè)字節(jié)一個(gè)鍵值來劃分,更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu)的方法具體為: 依次獲取所述索引字段對(duì)應(yīng)的鍵值,通過檢測(cè)所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為1,來判斷所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),若不具有孩子節(jié)點(diǎn),則分配一個(gè)新節(jié)點(diǎn),并使所述鍵值對(duì)應(yīng)的指針指向該新節(jié)點(diǎn),同時(shí)將該比特值置為1,以使所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),到達(dá)所述位圖-字典樹的葉子節(jié)點(diǎn)時(shí),使所述葉子節(jié)點(diǎn)對(duì)應(yīng)指針指向存儲(chǔ)位置鏈表,在該存儲(chǔ)位置鏈表中新增所述索引字段的存儲(chǔ)位置信息。
3.如權(quán)利要求1所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,當(dāng)內(nèi)存中的所述索引結(jié)構(gòu)大于內(nèi)存閾值時(shí),將所述索引結(jié)構(gòu)存入磁盤,并在所述索引結(jié)構(gòu)中增加一條記錄并指向磁盤存儲(chǔ)的位置,同時(shí)在內(nèi)存中建立一個(gè)新的索引結(jié)構(gòu),用于處理后續(xù)的網(wǎng)絡(luò)流量數(shù)據(jù)。
4.如權(quán)利要求3所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,將所述索引結(jié)構(gòu)存入磁盤的具體方式為,在磁盤中按照所述位圖-字典樹的層來存儲(chǔ)所述索引結(jié)構(gòu),且各層采用連續(xù)存儲(chǔ)方式。
5.如權(quán)利要求3或4所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,將所述索引結(jié)構(gòu)存入磁盤的方法具體為, 對(duì)于所述位圖-字典樹的每個(gè)節(jié)點(diǎn),先存儲(chǔ)位圖結(jié)構(gòu),然后存儲(chǔ)一個(gè)文件偏移位置的數(shù)組,該數(shù)組示出所述位圖-字典樹的每個(gè)節(jié)點(diǎn)的各孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,而對(duì)于所述位圖-字典樹的每個(gè)葉子節(jié)點(diǎn),該數(shù)組示出每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)鏈表的存儲(chǔ)位置。
6.如權(quán)利要求1或2所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引方法,其特征在于,所述步驟3的查詢所述索引結(jié)構(gòu)的查詢過程為, 將查詢條件按照每個(gè)字節(jié)一個(gè)鍵值來劃分,其中最后一個(gè)鍵值為未知鍵值,依此獲取所述查詢條件的鍵值,通過讀取所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為I來獲取該根節(jié)點(diǎn)對(duì)應(yīng)孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,并讀取該位置上的位圖-字典樹節(jié)點(diǎn),否則返回查詢結(jié)果為空,到達(dá)最后一個(gè)鍵值的前一個(gè)鍵值時(shí),獲取其在位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的所有比特值為I的位,然后獲取該所有比特值為I的位的偏移位置,最后讀取這些偏移位置的葉子節(jié)點(diǎn)和其對(duì)應(yīng)的鏈表元素,并將鏈表元素進(jìn)行合并返回。
7.—種網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,包括下列模塊: 網(wǎng)絡(luò)流量數(shù)據(jù)獲取模塊,用于通過網(wǎng)卡或板卡來實(shí)時(shí)捕獲網(wǎng)絡(luò)流量數(shù)據(jù);索引結(jié)構(gòu)維護(hù)模塊,所述網(wǎng)絡(luò)流量數(shù)據(jù)具有多個(gè)索引字段,該模塊用于在內(nèi)存中通過使所述索引字段維護(hù)位圖-字典樹來建立并存儲(chǔ)所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu),對(duì)于所述索引字段按字節(jié)來劃分鍵值,通過使所述鍵值在所述位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn)、葉子節(jié)點(diǎn)的指針指向存儲(chǔ)位置鏈表來更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu); 查詢響應(yīng)模塊,用于根據(jù)用戶的查詢請(qǐng)求查詢所述索引結(jié)構(gòu)從而獲得網(wǎng)絡(luò)流量數(shù)據(jù)的存儲(chǔ)位置信息,將該存儲(chǔ)位置信息返回給用戶,用戶根據(jù)該存儲(chǔ)位置信息獲取響應(yīng)的數(shù)據(jù)。
8.如權(quán)利要求7所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,在所述索引結(jié)構(gòu)維護(hù)模塊中,所述位圖-字典樹的高度等于所述索引字段的字節(jié)大小,對(duì)于所述索引字段按照每個(gè)字節(jié)一個(gè)鍵值來劃分,更新所述網(wǎng)絡(luò)流量數(shù)據(jù)的索引結(jié)構(gòu)的方法具體為: 依次獲取所述索引字段對(duì)應(yīng)的鍵值,通過檢測(cè)所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為1,來判斷所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),若不具有孩子節(jié)點(diǎn),則分配一個(gè)新節(jié)點(diǎn),并使所述鍵值對(duì)應(yīng)的指針指向該新節(jié)點(diǎn),同時(shí)將該比特值置為1,以使所述非葉子節(jié)點(diǎn)的指針具有孩子節(jié)點(diǎn),到達(dá)所述位圖-字典樹的葉子節(jié)點(diǎn)時(shí),使所述葉子節(jié)點(diǎn)對(duì)應(yīng)指針指向存儲(chǔ)位置鏈表,在該存儲(chǔ)位置鏈表中新增所述索引字段的存儲(chǔ)位置信息。
9.如權(quán)利要求7所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,當(dāng)內(nèi)存中的所述索引結(jié)構(gòu)大于內(nèi)存閾值時(shí),將所述索引結(jié)構(gòu)存入磁盤,并在所述索引結(jié)構(gòu)中增加一條記錄并指向磁盤存儲(chǔ)的位置,同時(shí)在內(nèi)存中建立一個(gè)新的索引結(jié)構(gòu),用于處理后續(xù)的網(wǎng)絡(luò)流量數(shù)據(jù)。
10.如權(quán)利要求9所 述的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,將所述索引結(jié)構(gòu)存入磁盤的具體方式為,在磁盤中按照所述位圖-字典樹的層來存儲(chǔ)所述索引結(jié)構(gòu),且各層采用連續(xù)存儲(chǔ)方式。
11.如權(quán)利要求9或10所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,將所述索引結(jié)構(gòu)存入磁盤的方法具體為, 對(duì)于所述位圖-字典樹的每個(gè)節(jié)點(diǎn),先存儲(chǔ)位圖結(jié)構(gòu),然后存儲(chǔ)一個(gè)文件偏移位置的數(shù)組,該數(shù)組示出所述位圖-字典樹的每個(gè)節(jié)點(diǎn)的各孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,而對(duì)于所述位圖-字典樹的每個(gè)葉子節(jié)點(diǎn),該數(shù)組示出每個(gè)葉子節(jié)點(diǎn)對(duì)應(yīng)鏈表的存儲(chǔ)位置。
12.如權(quán)利要求7或8所述的網(wǎng)絡(luò)流量數(shù)據(jù)索引系統(tǒng),其特征在于,所述查詢響應(yīng)模塊的對(duì)存入磁盤的索引結(jié)構(gòu)進(jìn)行查詢的查詢過程為, 將查詢條件按照每個(gè)字節(jié)一個(gè)鍵值來劃分,其中最后一個(gè)鍵值為未知鍵值,依此獲取所述查詢條件的鍵值,通過讀取所述鍵值在所述位圖-字典樹的非葉子節(jié)點(diǎn)的位圖結(jié)構(gòu)中所對(duì)應(yīng)的比特值為I來獲取該根節(jié)點(diǎn)對(duì)應(yīng)孩子節(jié)點(diǎn)在磁盤中的存儲(chǔ)位置,并讀取該位置上的位圖-字典樹節(jié)點(diǎn),否則返回查詢結(jié)果為空,到達(dá)最后一個(gè)鍵值的前一個(gè)鍵值時(shí),獲取其在位圖-字典樹的位圖結(jié)構(gòu)中所對(duì)應(yīng)的所有比特值為I的位,然后獲取該所有比特值為I的位的偏移位置,最后讀取這些偏移位置的葉子節(jié)點(diǎn)和其對(duì)應(yīng)的鏈表元素,并將鏈表元素進(jìn)行合并返回。
【文檔編號(hào)】G06F17/30GK103714134SQ201310698101
【公開日】2014年4月9日 申請(qǐng)日期:2013年12月18日 優(yōu)先權(quán)日:2013年12月18日
【發(fā)明者】賀泰華, 張廣興, 謝高崗, 董尚文, 付喬賓 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所