亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種數(shù)據(jù)存儲方法及裝置與流程

文檔序號:12176284閱讀:196來源:國知局
一種數(shù)據(jù)存儲方法及裝置與流程
本發(fā)明涉及網(wǎng)絡數(shù)據(jù)分析
技術(shù)領(lǐng)域
,具體提供一種數(shù)據(jù)存儲方法及裝置。
背景技術(shù)
:在進行網(wǎng)絡數(shù)據(jù)分析中,常常需要抓取網(wǎng)絡中的數(shù)據(jù)并進行存儲,以便后續(xù)對數(shù)據(jù)進行讀取分析。目前,網(wǎng)絡數(shù)據(jù)的存儲方式是,將抓取到的數(shù)據(jù)按照抓取的先后順序,依次存儲在硬盤中。然而,該種存儲方式不利于數(shù)據(jù)的讀取,即讀取利用該種方式存儲的數(shù)據(jù)時效率較低,不利于網(wǎng)絡數(shù)據(jù)的分析。技術(shù)實現(xiàn)要素:本發(fā)明的技術(shù)任務是針對上述存在的問題,提供一種能提高數(shù)據(jù)的讀取效率,方便對網(wǎng)絡數(shù)據(jù)進行分析的數(shù)據(jù)存儲方法。本發(fā)明的進一步的技術(shù)任務是提供一種能實現(xiàn)上述提高數(shù)據(jù)的讀取效率,方便對網(wǎng)絡數(shù)據(jù)進行分析的方法的數(shù)據(jù)存儲裝置。為實現(xiàn)上述目的,本發(fā)明提供了如下技術(shù)方案:一種數(shù)據(jù)存儲方法及裝置,將抓取到的數(shù)據(jù)按照時間先后順序暫存在緩存中,記錄具有相同類型屬性的數(shù)據(jù)在緩存中的位置,利用記錄的內(nèi)容將緩存中的數(shù)據(jù)按照屬性類型排序后存儲到硬盤中,即將具有相同類型屬性的數(shù)據(jù)連續(xù)存儲,該數(shù)據(jù)存儲方法的具體步驟為:S1:依據(jù)抓取數(shù)據(jù)的先后順序,將抓取到的多條數(shù)據(jù)存儲在第一緩存中,其中,各條所述數(shù)據(jù)具有N個相同類型的屬性,N為大于1的整數(shù);S2:依據(jù)所述多條數(shù)據(jù)在第一緩存中的位置,生成第一嵌套哈希表,其中,所述第一嵌套哈希表由N層第一哈希表嵌套組成,各層所述第一哈希表的鍵依次為所述N個相同類型的屬性,且第一層至第N-1層所述第一哈希表的值依次為下一層的第一哈希表,第N層第一哈希表的值為各條所述數(shù)據(jù)在第一緩存中的地址值;S3:根據(jù)預設遍歷順序,依次獲取所述第N層第一哈希表中的地址值;S4:根據(jù)獲取各個所述地址值的順序,依次將第一緩存中各個所述地址值對應的數(shù)據(jù)存儲至硬盤。步驟S1中,當需要對網(wǎng)絡數(shù)據(jù)進行分析時,可利用抓取工具,從網(wǎng)絡中抓取數(shù)據(jù),并依據(jù)抓取到的時間先后順序,將數(shù)據(jù)存儲到緩存中,其中可以在預設的時間段內(nèi),每當抓取工具抓取到一條網(wǎng)絡數(shù)據(jù),即將該網(wǎng)絡數(shù)據(jù)存入到緩存中,或者,抓取工具在預設時間段內(nèi)抓取到多條網(wǎng)絡數(shù)據(jù),然后,按照抓取順序,將該多條數(shù)據(jù)存入到緩存中。網(wǎng)絡數(shù)據(jù)具有屬性,抓取的多條數(shù)據(jù)具有相同類型的屬性。為了將步驟S1中的數(shù)據(jù)重新排序,需要記錄具有相同類型屬性的數(shù)據(jù)在緩存中的位置,本發(fā)明中采用哈希表的方式來記錄。哈希表利用鍵值對存儲數(shù)據(jù),即哈希表中可以存儲若干個哈希記錄,每個哈希記錄具有一個鍵及一個值,兩者具有對應關(guān)系。本發(fā)明中生成的哈希表為嵌套的多層哈希表,嵌套的形式是,由內(nèi)向外的第一層至第N-1層哈希表的值依次為下一層的哈希表。所述嵌套哈希表的層數(shù)與數(shù)據(jù)相同的屬性類型的個數(shù)相等,即步驟S1中的N值與步驟S2中的N值相等。每層哈希表中的鍵是一種類型的屬性,這樣生成的嵌套哈希表利用每層哈希表中鍵記錄相同類型屬性的數(shù)據(jù)。每層哈希表中的哈希記錄個數(shù)可以為一個,也可以為多個,每層中各個哈希記錄的鍵為相同類型的屬性,但是屬性值并不相同。最內(nèi)層即第N層哈希表的值為數(shù)據(jù)在緩存中的地址。生成第一嵌套哈希表的過程為:數(shù)據(jù)存儲在緩存中,也就是說每條數(shù)據(jù)均對一個緩存中的地址。由于每條數(shù)據(jù)均具有N種類型的屬性,根據(jù)數(shù)據(jù)自身每種類型屬性的屬性值,一層一層查找鍵內(nèi)容與數(shù)據(jù)的屬性值相同的哈希表記錄,直至找到第N層哈希表的哈希記錄,將該數(shù)據(jù)在緩存中的地址存儲在查找到的該哈希記錄的值中,如此反復即可生成第一嵌套哈希表。步驟S2生成的第一嵌套哈希表中包括多層哈希表,哈希表具有預設的遍歷順序,和數(shù)組遍歷順序相似,按照鍵的內(nèi)容依次遍歷。具體地,從第一層哈希表開始,當?shù)谝粚拥墓1碇械挠涗洖槎鄠€時,則按照預設順序,從第一個哈希記錄開始。當該哈希記錄的值為下一個哈希表時,則進入下一層哈希表中,從下一層哈希表的第一個記錄開始判斷,當該下一層哈希表中的哈希記錄的值為下下一層哈希表時,進入該下下一層哈希表,判斷該下下一層哈希表中的哈希記錄的值,重復上述步驟,直至某層哈希表中的哈希記錄的值為數(shù)據(jù)在緩存中的地址,此時,獲取該緩存中的地址,這樣獲取到第N層中的第一個哈希記錄的值。同理獲取到第N層中其他哈希記錄的值。遍歷結(jié)束后,獲取到的值為各個數(shù)據(jù)在緩存中的地址值,且地址值的獲取順序是按照數(shù)據(jù)的屬性類型分類獲取到的。步驟S4中將各個地址值中的數(shù)據(jù)依次存儲至硬盤中,存儲的順序為獲取到各個地址值的順序。這樣,將原來按照抓取先后順序存儲的數(shù)據(jù),按照屬性類型連續(xù)存儲,此種存儲方式將零散的數(shù)據(jù)按照屬性類型聚合在一起,從而在讀取時可以方便且快速的查找到具有相同屬性類型的數(shù)據(jù),數(shù)據(jù)讀取效率高。步驟S3和步驟S4是可以交替執(zhí)行的,即每當步驟S3獲取到地址值,便依據(jù)該地址值,在緩存中查找到該地址值對應的數(shù)據(jù),進而執(zhí)行步驟S4將數(shù)據(jù)存儲至硬盤。作為優(yōu)選,步驟S4中,根據(jù)獲取各個所述地址值的順序,依次將第一緩存中各個所述地址值對應的數(shù)據(jù)存儲至硬盤包括根據(jù)獲取各個所述地址值的順序,依次將所述第一緩存中各個所述地址值對應的數(shù)據(jù)存儲至第二緩存中,將第二緩存中的數(shù)據(jù)依次存儲至硬盤。作為優(yōu)選,還包括生成并存儲第二嵌套哈希表,其中,所述第二嵌套哈希表由N層第二哈希表嵌套組成,每層所述第二哈希表的鍵為三元組,且第一層至第N-1層所述第二哈希表的值依次為下一層的第二哈希表,第N層第二哈希表的值為各條所述數(shù)據(jù)在所述硬盤中的地址值。作為優(yōu)選,所述每層三元組的第一元素依次為所述N個相同類型的屬性,每層所述三元組的第二元素為各自層對應類型的屬性包含的數(shù)據(jù)在所述硬盤中的起始地址,每層所述三元組的第三元素為各自層對應類型的屬性包含的數(shù)據(jù)在所述硬盤中的數(shù)據(jù)長度。數(shù)據(jù)存儲至硬盤后,依據(jù)所述第二嵌套哈希表,從所述硬盤中讀取存儲的數(shù)據(jù)。其中包括:1)當接收到數(shù)據(jù)讀取指令時,提取所述數(shù)據(jù)讀取指令中的屬性類型及屬性值;2)在所述第二嵌套哈希表中,確定與所述屬性類型及屬性值對應的目標三元組;3)依據(jù)所述目標三元組的第二元素及第三元素,從所述硬盤中讀取存儲的數(shù)據(jù)。一種數(shù)據(jù)存儲裝置,包括第一緩存存儲單元、第一哈希表生成單元、緩存地址值獲取單元和硬盤數(shù)據(jù)存儲單元,所述第一緩存存儲單元用于依據(jù)抓取數(shù)據(jù)的先后順序,將抓取到的多條數(shù)據(jù)存儲至第一緩存,其中,各條所述數(shù)據(jù)具有N個相同類型的屬性;所述第一哈希表生成單元用于依據(jù)所述多條數(shù)據(jù)在第一緩存中的位置,生成第一嵌套哈希表,第一嵌套哈希表由N層第一哈希表嵌套組成;所述緩存地址值獲取單元用于根據(jù)預設遍歷順序,依次獲取所述第N層第一哈希表中的地址值;所述硬盤數(shù)據(jù)存儲單元用于根據(jù)獲取各個所述地址值的順序,依次將所述第一緩存中各個所述地址值對應的數(shù)據(jù)存儲至硬盤。所述各層第一哈希表的鍵依次為所述N個相同類型的屬性,且第一層至第N-1層所述第一哈希表的值依次為下一層的第一哈希表,第N層第一哈希表的值為各條所述數(shù)據(jù)在所述第一緩存中的地址值。作為優(yōu)選,所述硬盤數(shù)據(jù)存儲單元包括第二緩存存儲子單元和硬盤數(shù)據(jù)存儲子單元,第二緩存存儲子單元用于根據(jù)獲取各個所述地址值的順序,依次將所述第一緩存中各個所述地址值對應的數(shù)據(jù)存儲至第二緩存中;所述硬盤數(shù)據(jù)存儲子單元用于將所述第二緩存中的數(shù)據(jù)依次存儲至硬盤。作為優(yōu)選,還包括第二哈希表生成單元,用于生成并存儲第二嵌套哈希表,其中,所述第二嵌套哈希表由N層第二哈希表嵌套組成。每層所述第二哈希表的鍵為三元組,且第一層至第N-1層所述第二哈希表的值依次為下一層的第二哈希表,第N層第二哈希表的值為各條所述數(shù)據(jù)在所述硬盤中的地址值。各層所述三元組的第一元素依次為所述N個相同類型的屬性,每層所述三元組的第二元素為各自層對應類型的屬性包含的數(shù)據(jù)在所述硬盤中的起始地址,每層所述三元組的第三元素為各自層對應類型的屬性包含的數(shù)據(jù)在所述硬盤中的數(shù)據(jù)長度。數(shù)據(jù)存儲到硬盤后,由硬盤數(shù)據(jù)讀取單元依據(jù)所述第二套哈希表從所述硬盤中讀取存儲的數(shù)據(jù),所述硬盤數(shù)據(jù)讀取單元包括:1)讀取指令接收子單元,用于當接收到數(shù)據(jù)讀取指令時,提取所述數(shù)據(jù)讀取指令中的屬性類型及屬性值;2)目標三元組確定子單元,用于在所述第二嵌套哈希表中,確定與所述屬性類型及屬性值對應的目標三元組;3)硬盤數(shù)據(jù)讀取子單元,用于依據(jù)所述目標三元組的第二元素及第三元素,從所述硬盤中讀取存儲的數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本發(fā)明的數(shù)據(jù)存儲方法具有以下突出的有益效果:本發(fā)明的數(shù)據(jù)存儲方法將抓取到的數(shù)據(jù)按照時間先后順序暫存在緩存中,然后記錄具有相同類型屬性的數(shù)據(jù)在緩存中的位置,利用記錄的內(nèi)容將緩存中的數(shù)據(jù)按照屬性類型排序后存儲到硬盤中,即具有相同類型屬性的數(shù)據(jù)連續(xù)存儲,在讀取時可按照屬性條件連續(xù)讀取數(shù)據(jù),提高了數(shù)據(jù)讀取效率,克服了現(xiàn)有技術(shù)中將抓取到的數(shù)據(jù)按照抓取先后順序依次存儲在硬盤中,導致不利于數(shù)據(jù)讀取的不足。附圖說明圖1是本發(fā)明所述數(shù)據(jù)存儲方法的流程圖;圖2是本發(fā)明的讀取存儲數(shù)據(jù)方法的流程圖;圖3是本發(fā)明所述數(shù)據(jù)存儲裝置的結(jié)構(gòu)示意圖;圖4是本發(fā)明的讀取存儲數(shù)據(jù)的裝置的結(jié)構(gòu)示意圖。具體實施方式下面將結(jié)合附圖和實施例,對本發(fā)明的數(shù)據(jù)存儲方法及裝置作進一步詳細說明。實施例如圖1所示,本發(fā)明的數(shù)據(jù)存儲方法:將抓取到的數(shù)據(jù)按照時間先后順序暫存在緩存中,記錄具有相同類型屬性的數(shù)據(jù)在緩存中的位置,利用記錄的內(nèi)容將緩存中的數(shù)據(jù)按照屬性類型排序后存儲到硬盤中,即將具有相同類型屬性的數(shù)據(jù)連續(xù)存儲。該數(shù)據(jù)存儲方法的具體步驟為:S1:依據(jù)抓取數(shù)據(jù)的先后順序,將抓取到的多條數(shù)據(jù)存儲在第一緩存中,其中,各條所述數(shù)據(jù)具有N個相同類型的屬性,N為大于1的整數(shù)。當需要對網(wǎng)絡數(shù)據(jù)進行分析時,可利用抓取工具,從網(wǎng)絡中抓取數(shù)據(jù),并依據(jù)抓取到的時間先后順序,將數(shù)據(jù)存儲到緩存中,其中可以在預設的時間段內(nèi),每當抓取工具抓取到一條網(wǎng)絡數(shù)據(jù),即將該網(wǎng)絡數(shù)據(jù)存入到緩存中,或者,抓取工具在預設時間段內(nèi)抓取到多條網(wǎng)絡數(shù)據(jù),然后,按照抓取順序,將該多條數(shù)據(jù)放入到緩存中。網(wǎng)絡數(shù)據(jù)具有屬性,抓取的多條數(shù)據(jù)具有相同類型的屬性。數(shù)據(jù)的屬性類型可以是時間、物理地址、數(shù)據(jù)方向、IP會話數(shù)據(jù)包、TCP會話數(shù)據(jù)包等,則讀取需求可以是某個時間段內(nèi)某物理地址發(fā)送的所有數(shù)據(jù)包,則第一嵌套哈希表中存儲的屬性類型分別是時間、物理地址及數(shù)據(jù)方向;或者讀取需求是某個時間段內(nèi)某物理地址接收的所有數(shù)據(jù)包,則第一嵌套哈希表中存儲的屬性類型分別是時間、物理地址及數(shù)據(jù)方向;或者讀取需求是某個時間段內(nèi)某IP會話的所有數(shù)據(jù)包,則讀取需求是時間及IP會話數(shù)據(jù)包;或者讀取需求是某個時間段內(nèi)某TCP會話的所有數(shù)據(jù)包,則讀取需求是時間及TCP會話數(shù)據(jù)包。當然,上面幾種屬性類型及讀取需求僅僅是示例,具體的情況可以因抓取到的數(shù)據(jù)而不同,本發(fā)明實施例并不做具體限定。以抓取到TCP會話中的數(shù)據(jù)包為例,每個數(shù)據(jù)包都包括“源IP地址”、“源端口”、“目標IP地址”以及“目標端口”,這四種屬性為相同類型的屬性。S2:依據(jù)所述多條數(shù)據(jù)在第一緩存中的位置,生成第一嵌套哈希表,其中,所述第一嵌套哈希表由N層第一哈希表嵌套組成,各層所述第一哈希表的鍵依次為所述N個相同類型的屬性,且第一層至第N-1層所述第一哈希表的值依次為下一層的第一哈希表,第N層第一哈希表的值為各條所述數(shù)據(jù)在第一緩存中的地址值。為了將步驟S1中的數(shù)據(jù)重新排序,需要記錄具有相同類型屬性的數(shù)據(jù)在緩存中的位置,本發(fā)明中采用哈希表的方式來記錄。哈希表利用鍵值對存儲數(shù)據(jù),即哈希表中可以存儲若干個哈希記錄,每個哈希記錄具有一個鍵及一個值,兩者具有對應關(guān)系。本發(fā)明中生成的哈希表為嵌套的多層哈希表,嵌套的形式是,由內(nèi)向外的第一層至第N-1層哈希表的值依次為下一層的哈希表。嵌套哈希表的層數(shù)與數(shù)據(jù)相同的屬性類型的個數(shù)相等,即步驟S1中的N值與步驟S2中的N值相等。每層哈希表中的鍵是一種類型的屬性,這樣生成的嵌套哈希表利用每層哈希表中鍵記錄相同類型屬性的數(shù)據(jù)。每層哈希表中的哈希記錄個數(shù)可以為一個,也可以為多個,每層中各個哈希記錄的鍵為相同類型的屬性,但是屬性值并不相同。最內(nèi)層即第N層哈希表的值為數(shù)據(jù)在緩存中的地址。生成第一嵌套哈希表的過程為:數(shù)據(jù)存儲在緩存中,也就是說每條數(shù)據(jù)均對一個緩存中的地址。由于每條數(shù)據(jù)均具有N種類型的屬性,根據(jù)數(shù)據(jù)自身每種類型屬性的屬性值,一層一層查找鍵內(nèi)容與數(shù)據(jù)的屬性值相同的哈希表記錄,直至找到第N層哈希表的哈希記錄,將該數(shù)據(jù)在緩存中的地址存儲在查找到的該哈希記錄的值中,如此反復即可生成第一嵌套哈希表。第一嵌套哈希表的形式如下表1所示:例如,抓取到的數(shù)據(jù)包括三個相同類型的屬性,分別為屬性A、屬性B和屬性C,如表1所示的哈希表,該哈希表包括三層,其中,由內(nèi)至外,第一層哈希表的鍵屬于屬性A,各個哈希記錄的鍵分別為a1、a2……an,各個哈希記錄的值為第二層哈希表,第二層哈希表的鍵表示屬性B,各個哈希記錄的鍵分別為b1、b2……bn,各個哈希記錄的值為第三層哈希表,第三層哈希表的鍵表示屬性C,各個哈希記錄的鍵分別為c1、c-2……cn,各個哈希記錄的值為數(shù)據(jù)的緩存地址。表1:從最內(nèi)層來看,數(shù)據(jù)集合1包含的各條數(shù)據(jù)的屬性值分別為a1、b1及c1,數(shù)據(jù)集合2包含的各條數(shù)據(jù)的屬性值分別為a2、b2及c2,數(shù)據(jù)集合n包含的各條數(shù)據(jù)的屬性值分別為an、bn及cn。從最外層看,數(shù)據(jù)是按照屬性A進行聚合的,即所有數(shù)據(jù)按照屬性A的值進行分類,屬性A的值不同的數(shù)據(jù)分別屬于不同的哈希記錄。從第二層看,在第一層的分類基礎上,數(shù)據(jù)是按照屬性B進行聚合的,即屬性B的值不同的數(shù)據(jù)分別屬于不同的哈希記錄。依次類推,直至最內(nèi)一層的哈希表。需要說明的是,每一層哈希表中的各個哈希記錄是具有存儲順序的,該順序是抓取時間先后順序。由表1所示的第一嵌套哈希表可以看出,第一嵌套哈希表利用每層哈希表的鍵分別記錄不同類型屬性的數(shù)據(jù)的緩存地址,且當多個數(shù)據(jù)同一類型的屬性值相同時,這多個數(shù)據(jù)的緩存地址值會存儲在同一個哈希記錄中。生成上述表1所示第一嵌套哈希表的具體過程為:假設抓取到的數(shù)據(jù)具有三種類型的屬性,分別為屬性A、屬性B及屬性C。抓取到的數(shù)據(jù)分別為(d1,d2,d3….dn),各條數(shù)據(jù)暫存到緩存中,便可獲取到每條數(shù)據(jù)在緩存中的地址。建立一張哈希表HA,該哈希表HA作為最外層的哈希表,該哈希表HA的鍵用于存儲抓取到的數(shù)據(jù)的屬性A的值,值用于存儲下一層的哈希表HB;該哈希表HB的鍵用于存儲抓取到的數(shù)據(jù)的屬性B的值,值用于存儲下一層的哈希表HC;該哈希表HC的鍵用于存儲抓取到的數(shù)據(jù)的屬性C的值,值用于存儲數(shù)據(jù)在緩存中地址。第一步,獲取抓取到的第一條數(shù)據(jù)d1,該第一條數(shù)據(jù)的屬性A的值為Ad,在該哈希表HA中查找鍵為Ad的哈希記錄,若找到,則進行后續(xù)步驟,否則,在該哈希表HA中添加一條鍵為Ad且值為空哈希表的記錄。第二步,假設上一步在哈希表HA中查找到的(或添加的)記錄為rhb,記錄rhb的值也是一張哈希表HB。該第一條數(shù)據(jù)d1的屬性B的值為Bd,在哈希表HB中查找鍵為Bd的哈希記錄,若找到,則進行后續(xù)步驟,否則,在該哈希表HB中添加一條鍵為Bd且值為空哈希表的記錄。第三步,假設上一步在哈希表HB中查找到的(或添加的)記錄為rhc,記錄rhc的值也是一張哈希表HC。該第一條數(shù)據(jù)d1的屬性C的值為Cd,在哈希表HC中查找鍵為Cd的哈希記錄,若找到,則進行后續(xù)步驟,否則,在該哈希表HC中添加一條鍵為Cd且值為空數(shù)據(jù)集合的記錄。第四步,假設上一步在哈希表HC中查找到的(或添加的)記錄為rds,則rds的值為數(shù)據(jù)集合,該數(shù)據(jù)集合中包含的是d1在緩存中的地址,至此,完成一條數(shù)據(jù)的緩存地址的存儲過程。接下來繼續(xù)獲取抓取到的下一條數(shù)據(jù)d2,同理,將數(shù)據(jù)d2的緩存地址按照上述步驟進行存儲,將抓取到的數(shù)據(jù)的緩存地址存儲完成后即生成第一嵌套哈希表。下面用表2、表3及表4來說明各層哈希表。其中:從最外層來看,數(shù)據(jù)的緩存地址是按照屬性A的值進行聚合并排序,如表2所示:表2:進入下一層看,數(shù)據(jù)的緩存地址是按照屬性B的值進行聚合并排序的,如表3所示:表3:“屬性B”值為b1的數(shù)據(jù)的緩存地址“屬性B”值為b2的數(shù)據(jù)的緩存地址…“屬性B”值為bn的數(shù)據(jù)的緩存地址進入下一層看,數(shù)據(jù)的緩存地址是按照屬性C的值進行聚合并排序的,如表4所示:表4:“屬性C”值為c1的數(shù)據(jù)的緩存地址“屬性C”值為c2的數(shù)據(jù)的緩存地址…“屬性C”值為cn的數(shù)據(jù)的緩存地址S3:根據(jù)預設遍歷順序,依次獲取所述第N層第一哈希表中的地址值。S4:根據(jù)獲取各個所述地址值的順序,依次將第一緩存中各個所述地址值對應的數(shù)據(jù)存儲至硬盤。首先將第一緩存中的數(shù)據(jù)存儲在第二緩存中,再將第二緩存中的數(shù)據(jù)依次存儲至硬盤。具體地,將第一緩存中的數(shù)據(jù)按照第一嵌套哈希表的遍歷順序存儲至第二緩存中,由于第一嵌套哈希表是按照屬性類型分類存儲地址值的,則依據(jù)該遍歷順序?qū)⒏鱾€地址值對應的數(shù)據(jù)存儲到第二緩存中后,第二緩存中屬于同一類型屬性的數(shù)據(jù)會連續(xù)存儲,將該第二緩存中的數(shù)據(jù)依次存儲至硬盤,從而硬盤中存儲的數(shù)據(jù)也是按照屬性類型連續(xù)存儲的。該種實現(xiàn)方式中,利用第二緩存將第一緩存中的數(shù)據(jù)存儲至硬盤,避免直接將第一緩存中的數(shù)據(jù)存儲至硬盤時,多次寫入硬盤造成的硬盤I/O接口壓力。為了方便數(shù)據(jù)的讀取,生成并存儲第二哈希表,該第二哈希表用于記錄每種類型的屬性對應的數(shù)據(jù)在硬盤中的起始地址及數(shù)據(jù)長度。具體地,第二嵌套哈希表由N層第二哈希表嵌套組成,每層第二哈希表的鍵為三元組,且第一層至第N-1層第二哈希表的值依次為下一層的第二哈希表,第N層第二哈希表的值為各條數(shù)據(jù)在硬盤中的地址值;各層三元組的第一元素依次為N個相同類型的屬性,每層三元組的第二元素為各自層對應類型的屬性包含的數(shù)據(jù)在硬盤中的起始地址,每層三元組的第三元素為各自層對應類型的屬性包含的數(shù)據(jù)在硬盤中的數(shù)據(jù)長度。第二嵌套哈希表利用鍵的三元組記錄屬性值、數(shù)據(jù)存儲的起始地址及數(shù)據(jù)長度。該表的具體形式可參見表5所示。表5:從表5可以看出,屬性A的屬性值分別為(a1、a2…an),屬性B的屬性值分別(b1、b2…bn),屬性C的屬性值分別為(c1、c2…cn);屬性值為a1的連續(xù)數(shù)據(jù)的起始地址為addr_a1,數(shù)據(jù)長度為len_a1,屬性值為a1及b1的連續(xù)數(shù)據(jù)的起始地址為addr_b1、數(shù)據(jù)長度為len_b1,以此類推,可知其他數(shù)據(jù)。利用該第二嵌套哈希表可以進行數(shù)據(jù)讀取,具體如下所述:根據(jù)抓取到的數(shù)據(jù)的屬性類型,利用上述各個實施例將抓取到的數(shù)據(jù)存儲至硬盤,以方便數(shù)據(jù)讀取,即當接收到數(shù)據(jù)讀取指令時,依據(jù)生成的第二嵌套哈希表,從硬盤中讀取存儲的數(shù)據(jù)。具體地,如圖2所示,該讀取過程包括:1)當接收到數(shù)據(jù)讀取指令時,提取數(shù)據(jù)讀取指令中的屬性類型及屬性值。其中,數(shù)據(jù)讀取指令中包括屬性類型及屬性值。例如,屬性類型為時間段及四元組即源IP地址、源端口、目標IP地址以及目標端口。2):在第二嵌套哈希表中,確定與屬性類型及屬性值對應的目標三元組。以上述表5所示的第二嵌套哈希表為例,查找該表中屬性類型為提取的屬性類型且屬性值為提取的屬性值的三元組,假設屬性類型為A且屬性值為a1,則查找到的三元組為(a1,addr_a1,len_a1);又如屬性類型為A及B,屬性值分別為a1及b2,則查找到的三元組為(b2,addr_b2,len_b2)。3):依據(jù)目標三元組的第二元素及第三元素,從硬盤中讀取存儲的數(shù)據(jù)。即以目標三元組的第二元素的起始地址為起始點,從硬盤中讀取第三元素表示的數(shù)據(jù)長度的連續(xù)數(shù)據(jù),該段連續(xù)數(shù)據(jù)即是需要讀取的數(shù)據(jù)。例如,抓取到的數(shù)據(jù)的屬性類型包括時間及TCP會話數(shù)據(jù)包,進一步地,TCP會話數(shù)據(jù)包的屬性類型是四元組,那么存儲的數(shù)據(jù)類型包括時間及四元組,當將數(shù)據(jù)按照上述實施例提供的存儲方式存儲到硬盤中后,數(shù)據(jù)按照屬性類型進行了重排,即具有相同時間和/或相同四元組的數(shù)據(jù)連續(xù)存儲,且第二嵌套哈希表中記錄有連續(xù)存儲的相同時間和/或相同四元組的數(shù)據(jù)的起始地址及數(shù)據(jù)長度,這樣在讀取某個時間段內(nèi)某四元組的數(shù)據(jù)時,只需在第二嵌套哈希表中查找到該段數(shù)據(jù)的起始地址及數(shù)據(jù)長度,從該起始地址開始讀取該段數(shù)據(jù)長度的連續(xù)數(shù)據(jù)即可。如圖3所示,本發(fā)明的數(shù)據(jù)存儲裝置包括第一緩存存儲單元、第一哈希表生成單元、緩存地址值獲取單元和硬盤數(shù)據(jù)存儲單元。第一緩存存儲單元用于依據(jù)抓取數(shù)據(jù)的先后順序,將抓取到的多條數(shù)據(jù)存儲至第一緩存,其中,各條數(shù)據(jù)具有N個相同類型的屬性。第一哈希表生成單元用于依據(jù)多條數(shù)據(jù)在第一緩存中的位置,生成第一嵌套哈希表,第一嵌套哈希表由N層第一哈希表嵌套組成。各層第一哈希表的鍵依次為N個相同類型的屬性,且第一層至第N-1層第一哈希表的值依次為下一層的第一哈希表,第N層第一哈希表的值為各條數(shù)據(jù)在第一緩存中的地址值。緩存地址值獲取單元用于根據(jù)預設遍歷順序,依次獲取第N層第一哈希表中的地址值。硬盤數(shù)據(jù)存儲單元用于根據(jù)獲取各個地址值的順序,依次將第一緩存中各個地址值對應的數(shù)據(jù)存儲至硬盤。硬盤數(shù)據(jù)存儲單元包括第二緩存存儲子單元和硬盤數(shù)據(jù)存儲子單元,第二緩存存儲子單元用于根據(jù)獲取各個地址值的順序,依次將第一緩存中各個地址值對應的數(shù)據(jù)存儲至第二緩存中。硬盤數(shù)據(jù)存儲子單元用于將第二緩存中的數(shù)據(jù)依次存儲至硬盤。該數(shù)據(jù)存儲裝置還包括第二哈希表生成單元,用于生成并存儲第二嵌套哈希表;其中,第二嵌套哈希表由N層第二哈希表嵌套組成,每層第二哈希表的鍵為三元組,且第一層至第N-1層第二哈希表的值依次為下一層的第二哈希表,第N層第二哈希表的值為各條數(shù)據(jù)在硬盤中的地址值。各層三元組的第一元素依次為N個相同類型的屬性,每層三元組的第二元素為各自層對應類型的屬性包含的數(shù)據(jù)在硬盤中的起始地址,每層三元組的第三元素為各自層對應類型的屬性包含的數(shù)據(jù)在硬盤中的數(shù)據(jù)長度。該數(shù)據(jù)存儲裝置還包括硬盤數(shù)據(jù)讀取單元,用于依據(jù)第二嵌套哈希表,從硬盤中讀取存儲的數(shù)據(jù)。硬盤數(shù)據(jù)讀取單元包括讀取指令接收子單元、目標三元組確定子單元及硬盤數(shù)據(jù)讀取子單元。其中,讀取指令接收子單元用于當接收到數(shù)據(jù)讀取指令時,提取數(shù)據(jù)讀取指令中的屬性類型及屬性值;目標三元組確定子單元用于在第二嵌套哈希表中,確定與屬性類型及屬性值對應的目標三元組;硬盤數(shù)據(jù)讀取子單元用于依據(jù)目標三元組的第二元素及第三元素,從硬盤中讀取存儲的數(shù)據(jù)。以上所述的實施例,只是本發(fā)明較優(yōu)選的具體實施方式,本領(lǐng)域的技術(shù)人員在本發(fā)明技術(shù)方案范圍內(nèi)進行的通常變化和替換都應包含在本發(fā)明的保護范圍內(nèi)。當前第1頁1 2 3 
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1