本發(fā)明涉及一種內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法。特別是涉及一種支持快速查詢狀態(tài)數(shù)據(jù)的內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法。
背景技術(shù):
:當(dāng)今信息化已經(jīng)進(jìn)入了大數(shù)據(jù)時代,網(wǎng)絡(luò)服務(wù)越來越豐富,網(wǎng)速大幅度提升,網(wǎng)絡(luò)業(yè)務(wù)、辦公等極大方便,人們越來越多活動依賴網(wǎng)絡(luò)。使得網(wǎng)絡(luò)流量急劇增加,網(wǎng)絡(luò)設(shè)備數(shù)據(jù)的處理、存儲就顯得格外重要。對于動輒TB級別的數(shù)據(jù)量,常規(guī)的關(guān)系型數(shù)據(jù)庫也能夠做到很好的存儲。更新不頻繁的情況下,常規(guī)的關(guān)系型數(shù)據(jù)庫的查詢速度也很好。但對于數(shù)據(jù)量巨大,每天上億條數(shù)據(jù)的更新存儲,并且同時要求快速的查詢,常規(guī)的關(guān)系型數(shù)據(jù)庫則無法保證效率。鑒于此,如何既要很好的結(jié)構(gòu)存儲,又要保證穩(wěn)定快速的查詢,就顯得十分緊迫。一些NoSQL數(shù)據(jù)庫雖然能做到很好的存儲和查詢數(shù)據(jù),但數(shù)據(jù)結(jié)構(gòu)化方面比較單一,只能支持簡單的key=value字符存儲方式。技術(shù)實(shí)現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是,提供一種支持快速查詢狀態(tài)數(shù)據(jù)的內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法。本發(fā)明所采用的技術(shù)方案是:一種內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法,首先啟動一個內(nèi)存狀態(tài)數(shù)據(jù)服務(wù)進(jìn)程,進(jìn)程永久運(yùn)行,狀態(tài)服務(wù)進(jìn)程執(zhí)行以下步驟:1)申請兩份緩存集:第一緩存集和第二緩存集;每個緩存集包括:設(shè)備Hash列表緩存、設(shè)備信息緩存、端口信息緩存和狀態(tài)數(shù)據(jù)緩存;第一緩存集存放前一個存儲周期設(shè)備狀態(tài)數(shù)據(jù),第二緩存集存放當(dāng)前存儲周期設(shè)備狀態(tài)數(shù)據(jù);申請全局訪問控制讀寫鎖,進(jìn)入下一步驟;2)連接數(shù)據(jù)庫,查詢采集任務(wù)表,讀取設(shè)備采集粒度信息,生成設(shè)備采集粒度緩存,進(jìn)入下一步驟;3)啟動設(shè)備采集粒度緩存更新線程,周期性讀取采集任務(wù)表并更新設(shè)備采集粒度緩存,進(jìn)入下一步驟;4)啟動數(shù)據(jù)切換線程,每個存儲周期末,切換第一緩存集和第二緩存集中的數(shù)據(jù),切換后并清空第二緩存集中的數(shù)據(jù),進(jìn)入下一步驟;5)啟動歷史數(shù)據(jù)初始化線程,連接數(shù)據(jù)庫,從設(shè)備狀態(tài)數(shù)據(jù)表中讀取前一個存儲周期開始時間到當(dāng)前時間的設(shè)備狀態(tài)數(shù)據(jù),并存入緩存,進(jìn)入下一步驟;6)啟動HTTP監(jiān)聽服務(wù),等待接收處理遠(yuǎn)程數(shù)據(jù)查詢和數(shù)據(jù)更新請求。本發(fā)明的一種內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法,具有如下特點(diǎn):1.采集清晰的級別劃分存儲狀態(tài)數(shù)據(jù),設(shè)備級別數(shù)據(jù)、端口級別數(shù)據(jù)、時間級別數(shù)據(jù);2.采用Hash表或數(shù)組存儲不同級別數(shù)據(jù),從而可以使用hashcode或自然索引數(shù)組下標(biāo)快速定位數(shù)據(jù);3.存儲內(nèi)存重復(fù)利用,不需要重復(fù)頻繁申請釋放內(nèi)存;4.隨著數(shù)據(jù)量的變化,可以做到占用內(nèi)存大小的自適應(yīng),避免內(nèi)存浪費(fèi)。附圖說明圖1是數(shù)據(jù)內(nèi)存存儲示意圖;圖2是三個級別數(shù)據(jù)關(guān)系示意圖。具體實(shí)施方式下面結(jié)合實(shí)施例和附圖對本發(fā)明的一種內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法做出詳細(xì)說明。本發(fā)明的一種內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法,是根據(jù)數(shù)據(jù)統(tǒng)計劃分不同幾倍,包括設(shè)備級別數(shù)據(jù)、端口級別數(shù)據(jù)、時間點(diǎn)級別數(shù)據(jù),各個級別數(shù)據(jù)使用Hash表或數(shù)組方式存儲,上一級別數(shù)據(jù)直接引用下一級數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)化存儲,同時保證了高效的查詢服務(wù)。此外,數(shù)據(jù)緩存一次申請重復(fù)利用,避免頻繁的內(nèi)存申請釋放操作。長時間的服務(wù),隨著數(shù)據(jù)量的變化,可以自動增減內(nèi)存占用量,達(dá)到內(nèi)存自適應(yīng)效果。本發(fā)明的一種內(nèi)存存儲特定設(shè)備端口狀態(tài)數(shù)據(jù)的方法,首先啟動一個內(nèi)存狀態(tài)數(shù)據(jù)服務(wù)進(jìn)程,進(jìn)程永久運(yùn)行,狀態(tài)服務(wù)進(jìn)程執(zhí)行以下步驟:1)申請兩份足夠大的緩存集:第一緩存集和第二緩存集;每個緩存集包括:設(shè)備Hash列表緩存、設(shè)備信息緩存、端口信息緩存和狀態(tài)數(shù)據(jù)緩存;第一緩存集存放前一個存儲周期設(shè)備狀態(tài)數(shù)據(jù),第二緩存集存放當(dāng)前存儲周期設(shè)備狀態(tài)數(shù)據(jù);申請全局訪問控制讀寫鎖,進(jìn)入下一步驟;所述的設(shè)備Hash列表緩存是一個Hash表,根據(jù)設(shè)備唯一標(biāo)識進(jìn)行哈希運(yùn)算得到設(shè)備hashcode,使用設(shè)備hashcode可以直接定位設(shè)備Hash表中元素,Hash表中每個元素存儲一個指針,指針指向一個鏈表頭節(jié)點(diǎn),鏈表每個節(jié)點(diǎn)元素值是一個設(shè)備信息指針,指向設(shè)備信息緩存中某一位置。所述的設(shè)備信息緩存是一個存儲設(shè)備信息的數(shù)組,當(dāng)需要申請新的設(shè)備信息內(nèi)存時,則從設(shè)備信息緩存中分配一個數(shù)組元素用來存儲設(shè)備信息;設(shè)備信息包括:設(shè)備唯一標(biāo)識、設(shè)備狀態(tài)采集粒度、設(shè)備每個端口存儲狀態(tài)數(shù)據(jù)值最大數(shù)量、設(shè)備端口狀態(tài)數(shù)據(jù)Hash列表和設(shè)備級線程鎖;其中設(shè)備端口狀態(tài)數(shù)據(jù)Hash列表每個元素存儲一個指針,指針指向一個端口信息鏈表頭節(jié)點(diǎn),鏈表中每個節(jié)點(diǎn)元素值是一個端口信息指針,指向端口信息緩存中某一位置。所述的端口信息緩存是一個存儲端口信息的數(shù)組,當(dāng)需要申請新的端口信息內(nèi)存時,則從端口信息緩存中分配一個數(shù)組元素用來存儲端口信息;端口信息包括:端口的hashcode、端口的業(yè)務(wù)標(biāo)記、端口狀態(tài)數(shù)據(jù)數(shù)組、端口狀態(tài)數(shù)據(jù)數(shù)組已使用的最大下標(biāo)和端口級線程鎖;其中端口的hashcode是根據(jù)端口業(yè)務(wù)標(biāo)記執(zhí)行哈希計算得到;端口狀態(tài)數(shù)據(jù)數(shù)組是狀態(tài)數(shù)據(jù)緩存中的一段連續(xù)內(nèi)存,數(shù)組每個元素是一組狀態(tài)信息,所述的狀態(tài)信息包括所有要存儲的狀態(tài)數(shù)據(jù)。2)連接數(shù)據(jù)庫,查詢采集任務(wù)表,讀取設(shè)備采集粒度信息,生成設(shè)備采集粒度緩存,進(jìn)入下一步驟;所述的連接數(shù)據(jù)庫,查詢采集任務(wù)表,讀取設(shè)備采集粒度信息,生成設(shè)備采集粒度緩存,是根據(jù)配置中的數(shù)據(jù)庫訪問參數(shù)連接到數(shù)據(jù)庫,讀取采集任務(wù)表中設(shè)備采集粒度信息,并存儲到設(shè)備采集粒度緩存。其中采集任務(wù)表中設(shè)備采集粒度信息如表1,包括:設(shè)備唯一標(biāo)識和設(shè)備采集粒度(次/N分鐘);設(shè)備采集粒度緩存是一個Hash數(shù)組,根據(jù)設(shè)備唯一標(biāo)識進(jìn)行哈希計算得到設(shè)備hashcode,根據(jù)設(shè)備hashcode定位設(shè)備采集粒度在Hash數(shù)組中的存儲位置,數(shù)組元素中存放的是設(shè)備采集粒度數(shù)值。表1設(shè)備唯一標(biāo)識設(shè)備采集粒度(次/N分鐘)x.x.x.x1M(1分鐘)x.x.x.x5M(5分鐘)…………3)啟動設(shè)備采集粒度緩存更新線程,周期性讀取采集任務(wù)表并更新設(shè)備采集粒度緩存,進(jìn)入下一步驟;包括啟動一個新線程負(fù)責(zé)周期性的更新設(shè)備采集粒度緩存,其中線程執(zhí)行步驟如下:(1)線程啟動,進(jìn)入休眠,一個設(shè)備采集粒度緩存更新周期后,執(zhí)行下一步;(2)連接數(shù)據(jù)庫,進(jìn)入下一步;(3)創(chuàng)建一個臨時的設(shè)備采集粒度緩存,進(jìn)入下一步;(4)從數(shù)據(jù)庫采集任務(wù)表中循環(huán)讀取所有的設(shè)備采集粒度信息,并將讀取的采集粒度信息放入臨時的設(shè)備采集粒度緩存,進(jìn)入下一步;(5)使用臨時的設(shè)備采集粒度緩存替換舊的設(shè)備采集粒度緩存,并釋放舊的設(shè)備采集粒度緩存,進(jìn)入下一步;(6)斷開數(shù)據(jù)庫鏈接,執(zhí)行第(1)步。4)啟動數(shù)據(jù)切換線程,每個存儲周期末,切換第一緩存集和第二緩存集中的數(shù)據(jù),切換后并清空第二緩存集中的數(shù)據(jù),進(jìn)入下一步驟;包括:啟動一個新的線程負(fù)責(zé)在每個存儲周期末切換緩存集數(shù)據(jù)并清空第二緩存集中的數(shù)據(jù),第二緩存集用來存儲新一存儲周期的數(shù)據(jù),其中線程執(zhí)行步驟如下:(1)線程睡眠,1分鐘后,執(zhí)行下一步驟;(2)判斷時間是否是一個存儲周期結(jié)束,是,進(jìn)入下一步驟,否,第(1)步;(3)獲得全局訪問控制寫鎖,進(jìn)入下一步驟;(4)創(chuàng)建臨時的設(shè)備Hash列表緩存指針、設(shè)備信息緩存指針、端口信息緩存指針、狀態(tài)數(shù)據(jù)緩存指針,分別指向第一緩存集中的設(shè)備Hash列表緩存、設(shè)備信息緩存、端口信息緩存、狀態(tài)數(shù)據(jù)緩存,進(jìn)入下一步驟;(5)將第二緩存集中的設(shè)備Hash列表緩存、設(shè)備信息緩存、端口信息緩存、狀態(tài)數(shù)據(jù)緩存移到第一緩存集中,進(jìn)入下一步驟;(6)將第(4)步中創(chuàng)建的臨時的設(shè)備Hash列表緩存指針、設(shè)備信息緩存指針、端口信息緩存指針和狀態(tài)數(shù)據(jù)緩存指針指向的緩存內(nèi)的數(shù)據(jù)清空后,將所述的設(shè)備Hash列表緩存指針、設(shè)備信息緩存指針、端口信息緩存指針和狀態(tài)數(shù)據(jù)緩存指針移動到第二緩存集中,用來存儲新一周期的設(shè)備狀態(tài)數(shù)據(jù),進(jìn)入下一步;(7)釋放全局訪問控制寫鎖,執(zhí)行第(1)步。5)啟動歷史數(shù)據(jù)初始化線程,連接數(shù)據(jù)庫,從設(shè)備狀態(tài)數(shù)據(jù)表中讀取前一個存儲周期開始時間到當(dāng)前時間的設(shè)備狀態(tài)數(shù)據(jù),并存入緩存,進(jìn)入下一步驟;包括啟動一個新線程負(fù)責(zé)從數(shù)據(jù)庫設(shè)備狀態(tài)數(shù)據(jù)表中讀取前一個存儲周期開始時間到當(dāng)前時間范圍內(nèi)的設(shè)備狀態(tài)數(shù)據(jù),其中線程執(zhí)行步驟如下:(1)連接數(shù)據(jù)庫,執(zhí)行下一步驟;(2)讀取設(shè)備狀態(tài)數(shù)據(jù)表,取出從前一個存儲周期開始時間到當(dāng)前時間的一條設(shè)備狀態(tài)數(shù)據(jù),如果存在一條設(shè)備狀態(tài)數(shù)據(jù),執(zhí)行下一步驟,如果不存在一條設(shè)備狀態(tài)數(shù)據(jù),執(zhí)行步驟(6);(3)分解第(2)步中取出的一條設(shè)備狀態(tài)數(shù)據(jù),得到設(shè)備唯一標(biāo)識、端口業(yè)務(wù)標(biāo)記、時間和狀態(tài)信息,根據(jù)時間判斷數(shù)據(jù)應(yīng)該存儲在和一緩存集中,還是第二緩存集中,找到對應(yīng)緩存集的設(shè)備Hash列表緩存,對設(shè)備唯一標(biāo)識進(jìn)行哈希運(yùn)算得到設(shè)備hashcode,根據(jù)設(shè)備hashcode在設(shè)備Hash列表緩存查找到設(shè)備信息鏈表,根據(jù)設(shè)備唯一標(biāo)識在設(shè)備信息鏈表中查找設(shè)備信息,如果存在設(shè)備信息,進(jìn)入下一步驟,如果不存在設(shè)備信息,則從設(shè)備信息緩存中申請一份設(shè)備信息內(nèi)存,存入設(shè)備信息,根據(jù)設(shè)備唯一標(biāo)識查找設(shè)備采集粒度緩存得到設(shè)備采集粒度,將采集粒度存儲到設(shè)備信息,并使用每天分鐘總數(shù)除以采集粒度得到設(shè)備每個端口存儲狀態(tài)數(shù)據(jù)值最大數(shù)量,將新申請的設(shè)備信息內(nèi)存放在設(shè)備信息鏈表頭節(jié)點(diǎn)位置,進(jìn)入下一步驟;(4)根據(jù)第(3)步分解第(2)步中取出的一條設(shè)備狀態(tài)數(shù)據(jù)得到的端口業(yè)務(wù)標(biāo)記,通過哈希運(yùn)算得到端口hashcode,根據(jù)端口hashcode在設(shè)備端口狀態(tài)數(shù)據(jù)Hash列表中查找到端口信息鏈表,根據(jù)端口業(yè)務(wù)標(biāo)記在端口信息鏈表中查找端口信息,如果存在端口信息,進(jìn)入下一步驟,如果不存在端口信息,則從端口信息緩存中申請一份端口信息內(nèi)存,存入端口信息,并根據(jù)第(3)步中得到的設(shè)備信息中設(shè)備每個端口存儲狀態(tài)數(shù)據(jù)值最大數(shù)量在狀態(tài)數(shù)據(jù)緩存中申請足夠大的連續(xù)內(nèi)存,將連續(xù)內(nèi)的指針賦值給端口信息的端口狀態(tài)數(shù)據(jù)數(shù)組,將新申請的端口信息內(nèi)存放在端口信息鏈表頭節(jié)點(diǎn)位置,進(jìn)入下一步;(5)根據(jù)第(3)步分解第(2)步中取出的一條設(shè)備狀態(tài)數(shù)據(jù)得到的時間,使用時間所在當(dāng)天的分鐘數(shù)除以設(shè)備信息中的設(shè)備采集粒度得到狀態(tài)信息在端口狀態(tài)數(shù)據(jù)數(shù)組中的存儲位置,得到狀態(tài)信息內(nèi)存,將第(3)步分解第(2)步中取出的一條設(shè)備狀態(tài)數(shù)據(jù)得到的時間、狀態(tài)信息存入狀態(tài)信息內(nèi)存,執(zhí)行第(2)步;(6)斷開數(shù)據(jù)庫鏈接,結(jié)束線程。6)啟動HTTP監(jiān)聽服務(wù),等待接收處理遠(yuǎn)程數(shù)據(jù)查詢和數(shù)據(jù)更新請求。包括啟動一個網(wǎng)絡(luò)HTTP監(jiān)聽端口,時刻等待接收并處理遠(yuǎn)程數(shù)據(jù)查詢和數(shù)據(jù)更新HTTP訪問請求,其中監(jiān)聽處理步驟如下:(1)啟動一個網(wǎng)絡(luò)HTTP監(jiān)聽端口,執(zhí)行下一步驟;(2)等待遠(yuǎn)程訪問請求到來,當(dāng)一個請求到來時,執(zhí)行下一步驟;(3)啟動一個新的請求處理線程,負(fù)責(zé)處理訪問請求,第(2)步。第(3)步所述的啟動一個新的請求處理線程,負(fù)責(zé)處理訪問請求,是啟動一個新的線程,讀取訪問請求參數(shù),并根據(jù)參數(shù)進(jìn)行處理和響應(yīng)請求,包括:(ⅰ)讀取請求訪問參數(shù),執(zhí)行下一步驟;所述的請求訪問參數(shù),包括查詢請求訪問參數(shù)和更新請求訪問參數(shù)兩種。所述的查詢請求訪問參數(shù)包括:請求類型、端口唯一標(biāo)識列表、查詢數(shù)據(jù)時間范圍開始時間、查詢數(shù)據(jù)時間范圍結(jié)束時間;所述的端口唯一標(biāo)識列表包含多個端口唯一標(biāo)識,每個端口唯一標(biāo)識包括:端口業(yè)務(wù)標(biāo)識、設(shè)備唯一標(biāo)識。所述的更新請求訪問參數(shù)包含多個數(shù)據(jù)單元,每個數(shù)據(jù)單元包括:端口唯一標(biāo)識、狀態(tài)信息、時間。其中請求格式與參數(shù)格式如下:(a)數(shù)據(jù)查詢請求的格式與參數(shù)請求格式:type=select&bus_pri_key=key1,key2,…&start_time=y(tǒng)yyy-mm-dd_hh:mi:ss&end_time=y(tǒng)yyy-mm-dd_hh:mi:ss請求參數(shù):type:查詢類型,值固定為select;bus_pri_key:端口唯一標(biāo)識列表,包括多個端口唯一標(biāo)識,端口唯一標(biāo)識使用“,”分割,其中端口唯一標(biāo)識格式為“端口業(yè)務(wù)標(biāo)記_設(shè)備唯一標(biāo)識”start_time:查詢數(shù)據(jù)時間范圍的開始時間,格式為“yyyy-mm-dd_hh:mi:ss”end_time:查詢數(shù)據(jù)時間范圍的結(jié)束時間,格式為“yyyy-mm-dd_hh:mi:ss”(b)數(shù)據(jù)更新請求格式與參數(shù)請求格式:data=<data_unit>;<data_unit>;…請求參數(shù):data:要更新的data_unit列表,data_unit之間使用“;”分隔data_unit格式:bus_pri_key,status_data,timebus_pri_key:端口唯一標(biāo)識列表,包括多個端口唯一標(biāo)識,端口唯一標(biāo)識使用“,”分割,其中端口唯一標(biāo)識格式為“端口業(yè)務(wù)標(biāo)記_設(shè)備唯一標(biāo)識”status_data:端口狀態(tài)信息time:狀態(tài)統(tǒng)計時間,格式為“yyyy-mm-dd_hh:mi:ss”(ⅱ)解析請求參數(shù),判斷請求是查詢請求或是更新請求,如果是查詢請求,執(zhí)行數(shù)據(jù)查詢處理邏輯,如果是更新請求,執(zhí)行數(shù)據(jù)更新處理邏輯,進(jìn)入下一步驟;所述的數(shù)據(jù)查詢處理邏輯,包括:(a)分析查詢數(shù)據(jù)時間范圍開始時間,查詢數(shù)據(jù)時間范圍結(jié)束時間,如果開始時間晚于當(dāng)前時間,或者結(jié)束時間早于前一存儲周期開始時間,或者開始時間晚于結(jié)束時間,結(jié)束處理,否則,創(chuàng)建端口信息臨時鏈表,執(zhí)行下一步驟;(b)取出請求參數(shù)端口唯一標(biāo)識列表中的一個端口唯一標(biāo)識,如果存在一個端口唯一標(biāo)識,執(zhí)行下一步,如果不存在一個端口唯一標(biāo)識,執(zhí)行第(e)步;(c)分解第(b)步取出的端口唯一標(biāo)識得到端口業(yè)務(wù)標(biāo)記和設(shè)備唯一標(biāo)識,根據(jù)查詢數(shù)據(jù)時間范圍開始時間,查詢數(shù)據(jù)時間范圍結(jié)束時間判斷要請求的數(shù)據(jù)是緩存集一中數(shù)據(jù),還是緩存集二中數(shù)據(jù),找到對應(yīng)緩存集的設(shè)備Hash列表緩存,對設(shè)備唯一標(biāo)識進(jìn)行哈希運(yùn)算得到設(shè)備hashcode,根據(jù)設(shè)備hashcode在設(shè)備Hash列表緩存查找到設(shè)備信息鏈表,根據(jù)設(shè)備唯一標(biāo)識在設(shè)備信息鏈表中查找設(shè)備信息,如果存在設(shè)備信息,進(jìn)入下一步,如果不存在設(shè)備信息,執(zhí)行第(b)步;(d)根據(jù)第(c)步中分解第(b)步取出的端口唯一標(biāo)識得到的端口業(yè)務(wù)標(biāo)記,通過哈希運(yùn)算得到端口hashcode,根據(jù)端口hashcode在第(c)步查找到的設(shè)備信息中的設(shè)備端口狀態(tài)數(shù)據(jù)Hash列表中查找到端口信息鏈表,根據(jù)端口業(yè)務(wù)標(biāo)記在端口信息鏈表中查找端口信息,如果存在端口信息,將查找到的端口信息加入到第(a)步中創(chuàng)建的端口信息臨時鏈表,進(jìn)入下一步驟,如果不存在端口信息,執(zhí)行第(b)步;(e)取出第(a)步中創(chuàng)建的端口信息臨時鏈表中的一個端口信息,如果存在一個端口信息,讀取端口信息的端口狀態(tài)數(shù)據(jù)數(shù)組,將狀態(tài)數(shù)據(jù)數(shù)組中狀態(tài)信息時間在查詢數(shù)據(jù)時間范圍開始時間,查詢數(shù)據(jù)時間范圍結(jié)束時間范圍內(nèi)的設(shè)備狀態(tài)數(shù)據(jù)發(fā)送到HTTP客戶端,結(jié)束處理,如果不存在一個端口信息,釋放端口信息臨時鏈表,結(jié)束處理。所述的更新處理邏輯,包括:(a)取出請求參數(shù)中的一個數(shù)據(jù)單元,如果存在一個數(shù)據(jù)單元,執(zhí)行下一步,如果不存在一個數(shù)據(jù)單元,結(jié)束處理;(b)分解第(a)步中取出的一個數(shù)據(jù)單元,得到設(shè)備唯一標(biāo)識、端口業(yè)務(wù)標(biāo)記、時間、狀態(tài)信息,根據(jù)時間判斷數(shù)據(jù)應(yīng)該存儲在第一緩存集中,還是第二緩存集中,如果既不是第一緩存集,也不是第二緩存集,丟棄取出的數(shù)據(jù)單元,執(zhí)行第(a)步,否則,找到對應(yīng)緩存集的設(shè)備Hash列表緩存,對設(shè)備唯一標(biāo)識進(jìn)行哈希運(yùn)算得到設(shè)備hashcode,根據(jù)設(shè)備hashcode在設(shè)備Hash列表緩存查找到設(shè)備信息鏈表,根據(jù)設(shè)備唯一標(biāo)識在設(shè)備信息鏈表中查找設(shè)備信息,如果存在設(shè)備信息,進(jìn)入下一步,如果不存在設(shè)備信息,則從設(shè)備信息緩存中申請一個設(shè)備信息內(nèi)存,存儲設(shè)備信息,根據(jù)設(shè)備唯一標(biāo)識查找設(shè)備采集粒度緩存得到設(shè)備采集粒度,將采集粒度存儲到設(shè)備信息中并使用每天都分鐘總數(shù)除以采集粒度得到設(shè)備每個端口存儲狀態(tài)數(shù)據(jù)值最大數(shù)量,將新申請的設(shè)備信息內(nèi)存放在設(shè)備信息鏈表頭節(jié)點(diǎn)位置,進(jìn)入下一步驟;(c)根據(jù)第(b)步分解第(a)步中取出的一個數(shù)據(jù)單元得到的端口業(yè)務(wù)標(biāo)記,通過哈希運(yùn)算得到端口hashcode,根據(jù)端口hashcode在設(shè)備端口狀態(tài)數(shù)據(jù)Hash列表查找到端口信息鏈表,根據(jù)端口業(yè)務(wù)標(biāo)記在端口信息鏈表中查找端口信息,如果存在端口信息,進(jìn)入下一步驟,如果不存在端口信息,則從端口信息緩存中申請一份端口信息內(nèi)存,存入端口信息,并根據(jù)第(b)步中得到的設(shè)備信息中設(shè)備每個端口存儲狀態(tài)數(shù)據(jù)值最大數(shù)量在狀態(tài)數(shù)據(jù)緩存中申請足夠大的連續(xù)內(nèi)存,關(guān)聯(lián)連續(xù)內(nèi)存到端口信息的端口狀態(tài)數(shù)據(jù)數(shù)組,將新申請的端口信息內(nèi)存放在端口信息鏈表頭節(jié)點(diǎn)位置,進(jìn)入下一步;(d)根據(jù)第(b)步分解第(a)步中取出的一個數(shù)據(jù)單元得到的時間,使用時間所在當(dāng)天的分鐘數(shù)除以設(shè)備信息中的設(shè)備采集粒度確定狀態(tài)信息在端口狀態(tài)數(shù)據(jù)數(shù)組中的存儲位置,得到狀態(tài)信息內(nèi)存,將分解第(a)步中取出的一個數(shù)據(jù)單元得到的時間、狀態(tài)信息存入狀態(tài)信息內(nèi)存,執(zhí)行第(a)步。(ⅲ)關(guān)閉HTTP鏈接,結(jié)束線程。如圖1所示,是數(shù)據(jù)內(nèi)存存儲示意圖,設(shè)備Hash列表緩存包含設(shè)備信息多個鏈表,設(shè)備信息鏈表包含多個設(shè)備信息,每個設(shè)備信息包含一個設(shè)備端口信息Hash表,設(shè)備端口信息Hash表包含多個端口信息鏈表,端口信息鏈表包含多個端口信息,每個端口信息包含一個時間序列的狀態(tài)信息數(shù)組,數(shù)組中每個元素是一組狀態(tài)信息數(shù)據(jù)。如圖2所示,是三個級別數(shù)據(jù)關(guān)系示意圖,設(shè)備級數(shù)據(jù)是以設(shè)備為單位的數(shù)據(jù)存儲,包含設(shè)備唯一標(biāo)識、設(shè)備狀態(tài)采集粒度、設(shè)備每個端口存儲狀態(tài)數(shù)據(jù)值最大數(shù)量、設(shè)備端口狀態(tài)數(shù)據(jù)Hash列表、設(shè)備級線程鎖;端口級數(shù)據(jù)是以端口為單位的數(shù)據(jù)存儲,包含端口的hashcode、端口的業(yè)務(wù)標(biāo)記、端口狀態(tài)數(shù)據(jù)數(shù)組、端口狀態(tài)數(shù)據(jù)數(shù)組已使用的最大下標(biāo)、端口級線程鎖;時間級數(shù)據(jù)是以設(shè)備狀態(tài)采集粒度為單位的數(shù)據(jù)存儲,其中數(shù)據(jù)是某一時刻狀態(tài)信息數(shù)據(jù)。當(dāng)前第1頁1 2 3