本發(fā)明涉及一種數(shù)據(jù)平均值處理技術,尤其是涉及一種歷史平均值管理系統(tǒng)及管理方法。
背景技術:
傳統(tǒng)的工業(yè)控制系統(tǒng)平均值計算查詢系統(tǒng)中,數(shù)據(jù)存入在關系數(shù)據(jù)庫,由于一個位號光分鐘平均值一天就要存儲1440條數(shù)據(jù),當位號總數(shù)過萬時,每天增加一千多萬條數(shù)據(jù)。數(shù)據(jù)越多對查詢速度影響越大,所以在這種情況下,往往每隔一段時間就會清除部分數(shù)據(jù),這樣保存的數(shù)據(jù)有限,并且直接導致查詢的時間段有一定的限制。
技術實現(xiàn)要素:
本發(fā)明主要是解決現(xiàn)有技術中平均值查詢系統(tǒng)的查詢速度慢,且每隔一段時間需要清除部分數(shù)據(jù),數(shù)據(jù)保存有限的問題,提供了一種優(yōu)化存儲結構,查詢速度恒定,數(shù)據(jù)存儲量大的歷史平均值管理系統(tǒng)及管理方法。
本發(fā)明的上述技術問題主要是通過下述技術方案得以解決的:一種歷史平均值管理系統(tǒng),包括客戶端和服務器端,所述客戶端包括數(shù)據(jù)查詢請求單元,所述服務器端包括數(shù)據(jù)查詢單元、數(shù)據(jù)源、數(shù)據(jù)采集單元、環(huán)狀數(shù)據(jù)緩沖單元、平均值處理單元、平均值文件單元,數(shù)據(jù)源、數(shù)據(jù)采集單元、環(huán)狀數(shù)據(jù)緩沖單元、平均值處理單元、平均值文件單元順序連接,所述數(shù)據(jù)查詢單元分別與環(huán)狀數(shù)據(jù)緩沖單元、平均值文件單元相連接,所述數(shù)據(jù)查詢請求單元通過網(wǎng)絡與數(shù)據(jù)查詢單元相連接。本發(fā)明中數(shù)據(jù)采集單元對數(shù)據(jù)源各類型參數(shù)的實時變化數(shù)據(jù)進行采集,即對每秒的瞬時值進行采集;環(huán)狀數(shù)據(jù)緩沖單元接收數(shù)據(jù)采集單元發(fā)送來的數(shù)據(jù),通過環(huán)形保存方式,不間斷的進行數(shù)據(jù)存入,同時通過平均值處理單元進行分鐘平均值計算和存儲,另外還同時將平均值數(shù)據(jù)寫入平均值文件單元里;平均值處理單元對環(huán)狀緩沖單元內數(shù)據(jù)進行分鐘平均值計算,以及對平均值文件單元內數(shù)據(jù)進行小時平均值計算,并控制環(huán)狀緩沖單元每隔一段時間將數(shù)據(jù)寫入平均值文件單元內;平均值文件單元包括若干平均值文件,每個平均值文件按照設定的數(shù)據(jù)存儲結構存儲一個時間區(qū)間內的數(shù)據(jù),一般以24小時為一個時間區(qū)間,計算的分鐘平均值數(shù)據(jù)、小時平均值數(shù)據(jù)。本發(fā)明將數(shù)據(jù)根據(jù)時間區(qū)分存入若干平均值文件內,每個文件都具有便于檢索的存儲結構,這使得用戶能夠快速進行查詢,減少了平均值查詢花費時間,在足夠大硬盤支持下,可以查詢更長的區(qū)間數(shù)據(jù),解決了傳統(tǒng)查詢系統(tǒng)中因存儲數(shù)據(jù)增加,影響查詢速度,需要每隔一段時間刪除部分數(shù)據(jù),保存數(shù)據(jù)有限的問題。本發(fā)明通過平均值文件以設定存儲結構進行存儲數(shù)據(jù),使得能保存更長時間的數(shù)據(jù)平均值,并且查詢復雜度恒定,查詢時間不會因為時間越久而速度越慢。
作為一種優(yōu)選方案,所述環(huán)狀數(shù)據(jù)緩沖單元的存儲結構包括緩存頭、位號頭、若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊,若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊分別都以循環(huán)讀寫方式呈環(huán)形分布;
緩存頭:保存所有位號總數(shù)和最近一次讀取緩存中平均值數(shù)據(jù)塊的時間;
位號頭:保存位號名稱,位號瞬時值的讀指針、寫指針,位號平均值的讀指針、寫指針;每個位號對應一種類型參數(shù)的名稱。
平均值數(shù)據(jù)塊:保存分鐘平均值和分鐘時間;分鐘時間將去掉秒的數(shù)字,只保留年、月、日、時和分。平均值以循環(huán)的方式在平均值數(shù)據(jù)塊上進行寫入與讀取,平均值記錄區(qū)間的長度可以根據(jù)具體要求做相應的增加和刪除。
瞬時值數(shù)據(jù)塊:保存瞬時值和寫入的時間。瞬時值以循環(huán)的方式在平均值數(shù)據(jù)塊上進行寫入與讀取。
作為一種優(yōu)選方案,所述平均值文件單元包括若干平均值文件,平均值文件的存儲結構包括歷史文件頭、一級索引、若干二級索引和若干數(shù)據(jù)塊;
歷史文件頭:保存文件標示、文件版本、字節(jié)序、開始時間、結束時間和位號總數(shù);文件標示記錄一個特定字符串,標示此文件為平均值文件;文件版本主要區(qū)分當文件數(shù)據(jù)塊等長度有變化時,可以應對不同的方法進行處理;字節(jié)序主要是區(qū)分服務器端上多字節(jié)數(shù)據(jù)保存時,高位和低位的存儲位置,一般寫入一個32位的int整數(shù),每次取值時可以根據(jù)原先數(shù)據(jù)與寫入數(shù)據(jù)來比較區(qū)分字節(jié)序是否一致,如果不一致可以不處理,或者用字節(jié)序轉換的方式進行處理,在當字節(jié)序一致時,跳過對該文件字節(jié)序轉換的步驟;開始時間和結束時間記錄文件創(chuàng)建時間和最后一個數(shù)據(jù)寫入的時間;位號總數(shù)是填寫文件中記錄位號的個數(shù)。
一級索引:結構包括若干位號頭,每個對應的位號頭保存位號名稱和二級索引地址;
二級索引:結構包括順序排列的索引頭、上一塊二級索引地址、下一塊二級索引地址、若干小時平均值結構體和若干數(shù)據(jù)塊地址結構體;索引頭保存每個位號對應的一級索引地址,上一塊二級索引地址保存與位號上方相鄰的二級索引地址,下一塊二級索引地址保存與位號下方相鄰的二級索引地址,小時平均值結構體保存小時時段和小時平均值,數(shù)據(jù)塊地址結構體保存分鐘段開始時間、分鐘段結束時間和對應數(shù)據(jù)塊地址;每個二級索引長度是固定的,一級索引所要填寫的二級索引地址就根據(jù)第一個二級索引開始地址逐個加上二級索引的長度就能得出。數(shù)據(jù)塊地址結構體中的數(shù)據(jù)地址,由每個數(shù)據(jù)塊的總長度計算而來。
數(shù)據(jù)塊:結構包括順序排列的數(shù)據(jù)塊索引頭、若干分鐘平均值結構體;數(shù)據(jù)索引頭保存對應二級索引地址,分鐘平均值結構體保存分鐘段時間和平均值。數(shù)據(jù)塊只需保存一個二級索引地址。
一種歷史平均值管理系統(tǒng)管理方法,包括平均值存儲步驟和數(shù)據(jù)查詢步驟,
平均值存儲步驟包括以下步驟:
SS1.定義環(huán)狀數(shù)據(jù)緩沖單元和平均值文件單元的存儲結構;
SS2.通過計時,計算環(huán)狀數(shù)據(jù)緩沖單元內所有位號一分鐘平均值并進行存儲;
SS3.通過計時,相隔設定分鐘,將該時間段內所有分鐘平均值寫入對應平均值文件;
SS4.在當前平均值文件將其所有分鐘平均值寫完畢后,計算小時平均值并關閉文件,返回步驟SS2;
數(shù)據(jù)查詢步驟包括以下步驟:
SI1.分析查詢請求,確定查詢時間區(qū)間、查詢類型;
SI2. 查詢類型為分鐘平均值,根據(jù)查詢時間區(qū)間對應從環(huán)狀數(shù)據(jù)緩沖單元、平均值文件查詢分鐘平均值,進入步驟SI5;
SI3.查詢類型為小時平均值,從平均值文件查詢小時平均值,進入步驟SI5;
SI4.查詢類型為天、月或年平均值,根據(jù)小時平均值整理出數(shù)據(jù);
SI5.將查詢的數(shù)據(jù)返回數(shù)據(jù)給客戶端。
作為一種優(yōu)選方案,步驟SS1中定義環(huán)狀數(shù)據(jù)緩沖單元的存儲結構為:
包括緩存頭、位號頭、若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊,若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊分別都以循環(huán)讀寫方式呈環(huán)形分布;
緩存頭:保存有位號總數(shù)和最近一次讀取環(huán)狀數(shù)據(jù)緩沖單元中平均值數(shù)據(jù)塊的時間;
位號頭:保存位號名稱,位號瞬時值的讀指針、寫指針,位號平均值的讀指針、寫指針;
平均值數(shù)據(jù)塊:保存分鐘平均值和分鐘時間;
瞬時值數(shù)據(jù)塊:保存瞬時值和寫入的時間;
定義平均值文件單元的存儲結構為:
包括若干平均值文件,平均值文件的存儲結構包括歷史文件頭、一級索引、若干二級索引和若干數(shù)據(jù)塊;
歷史文件頭:保存文件標示、文件版本、字節(jié)序、開始時間、結束時間和位號總數(shù);
一級索引:結構包括若干位號頭,每個對應的位號頭保存位號名稱和二級索引地址;
二級索引:結構包括順序排列的索引頭、上一塊二級索引地址、下一塊二級索引地址、若干小時平均值結構體和若干數(shù)據(jù)塊地址結構體;索引頭保存每個位號對應的一級索引地址,上一塊二級索引地址保存與位號上方相鄰的二級索引地址,下一塊二級索引地址保存與位號下方相鄰的二級索引地址,小時平均值結構體保存小時時段和小時平均值,數(shù)據(jù)塊地址結構體保存分鐘段開始時間、分鐘段結束時間和對應數(shù)據(jù)塊地址;
數(shù)據(jù)塊:結構包括順序排列的數(shù)據(jù)塊索引頭、若干分鐘平均值結構體;數(shù)據(jù)索引頭保存對應二級索引地址,分鐘平均值結構體保存分鐘段時間和平均值。
作為一種優(yōu)選方案,步驟SS2的具體過程為:
計時操作為開啟定時器,每秒觸發(fā)一次,服務器端判斷當前時間離上一次計算分鐘平均值的時間是否超過一分鐘,若否進入步驟SS3,若是則進行所有位號的分鐘平均值計算,將計算的分鐘平均值寫入環(huán)狀數(shù)據(jù)單元指定位置內,其中分鐘平均值計算過程為:
獲取環(huán)狀數(shù)據(jù)緩沖單元中對應的瞬時值讀指針,從讀指針開始找到指定分鐘前的一個瞬時值,以及指定分鐘時間段內所有瞬時值,從指定分鐘的第1秒開始,判斷當前秒是否有瞬時值,若有則繼續(xù)往下一秒執(zhí)行,若無則用當前秒前的瞬時值作為當前秒瞬時值,如此操作直至補齊整個60秒內的瞬時值,最后對60個瞬時值取平均值得到分鐘平均值。這里的時間都會做歸零處理,也就是將多余的秒數(shù)去掉,如xx年xx月xx日18點20分12秒,歸零后變成xx年xx月xx日18點20分0秒。本方案通過對數(shù)據(jù)補點來計算出分鐘平均值。
作為一種優(yōu)選方案,步驟SS3的具體過程為:
SS31.判斷當前平均值文件是否寫滿,若否進入下一步驟,若是則新建一個平均值文件;
SS32.服務器端將當前時間與上一次寫設定分鐘平均值的時間進行比較,判斷是否超過設定分鐘,若否返回步驟SS2,若是則獲取環(huán)狀數(shù)據(jù)緩沖區(qū)平均值讀取指針,從平均值讀取指針開始往后找,獲取設定分鐘內所有的分鐘平均值,寫入平均值文件。平均值文件寫的過程為,通過位號在一級索引中找到二級索引的位置,將之前記錄的寫文件次數(shù)作為偏移量(這里寫文件次數(shù)根據(jù)設定多少分鐘進行一次寫入平均值文件有關,例如每10分鐘寫入一次,則將一天時間分成1440/10份,在平均值文件內,每次保存當前寫入的是第幾個10分鐘),找到該位號的數(shù)據(jù)塊所在位置,然后將10分鐘的平均值分別寫入對應數(shù)據(jù)塊中,最后將寫文件次數(shù)增一,方便下次寫入時找到正確的偏移位置。
作為一種優(yōu)選方案,步驟SS4的具體過程為:
在當前平均值文件將將設定分鐘時間段分鐘平均值寫完畢后,判斷平均值文件記錄的寫文件次數(shù)是否達到設定次數(shù),若否返回步驟SS2,若是則計算整個平均值文件中所有時段的小時平均值,并將計算后的值寫入對應位置,關閉文件,返回步驟SS2。本方案中依照前面以每10分鐘寫入一次例子,平均值文件以一天為存儲區(qū)間,則平均值文件需寫入144次。計算小時平均值為最后一個步驟,寫完就要關閉平均值文件。
作為一種優(yōu)選方案,數(shù)據(jù)查詢步驟具體為:
在步驟SI1中,查詢請求包括查詢位號、查詢類型、查詢的起始時間以及結束時間,查詢類型包括分鐘平均值、小時平均值、天平均值、月平均值和年平均值;根據(jù)查詢類型、查詢的起始時間以及結束時間,當查詢分鐘平均值時,剔除當前時間所在分鐘,當查詢小時平均值時,剔除當前時間所在小時,以此類推;對查詢類型進行判斷,是否為分鐘平均值、小時平均值、天平均值、月平均值或年平均值;本方案用于剔除無法完整計算的平均值時段,以確定查詢時間區(qū)間。同時對查詢類型進行判斷。
在步驟SI2中,判斷查詢分鐘平均值時間區(qū)間的時間是否都大于環(huán)狀數(shù)據(jù)緩沖單元最后一次記錄的寫入平均值文件的時間,若是從環(huán)狀數(shù)據(jù)緩沖單元中查詢分鐘平均值,若否再判斷分鐘平均值時間區(qū)間是否有部分時間大于環(huán)狀數(shù)據(jù)緩沖單元最后一次記錄的寫入平均值文件的時間,若有則部分時間從環(huán)狀數(shù)據(jù)緩沖單元中查詢分鐘平均值,時間區(qū)間其余部分時間從平均值文件中查詢分鐘平均值;若沒有則直接從平均值文件查詢分鐘平均值;本方案中從環(huán)狀數(shù)據(jù)緩沖單元中查詢分鐘平均值的方法與寫入平均值文件時讀取分鐘平均值一樣。平均值文件內查詢分鐘平均值時,在二級索引中通過數(shù)據(jù)塊地址結構體進行對開始時間和結束時間的時間匹配,找出所有匹配的數(shù)據(jù)塊。
在步驟SI3中,判斷查詢小時平均值時間區(qū)間對應的小時平均值結構體內數(shù)據(jù)是否為空,若否從平均值文件中查詢小時平均值,若是則計算小時平均值,然后再判斷小時平均值區(qū)間內是否有一個小時跨越兩個平均值文件,若無進入步驟SI5,若有則對該跨越小時的平均值進行重新計算,跨越小時平均值=(W*V1+U*V2)/60 ,其中W為跨越小時前一個小時的小時平均值,U為跨越小時后一個小時的小時平均值,V1為前一個平均值文件結束時間的分鐘值,V2為后一個平均值文件開始時間的分鐘值;跨越小時平均值根據(jù)文件頭結構體中的開始時間和結束時間,按比例進行平均值計算。將一小時進行60等分即以分鐘為單元,V1+V2=60。例如上一個文件時15:50結束,則V1為50,下一個文件是15:50開始,V2=60-V1=10。
在步驟IS4中,查詢類型為天、月或年平均值,根據(jù)步驟IS3查詢時間區(qū)間內小時平均值,根據(jù)小時平均值計算出天、月或年平均值,返回數(shù)據(jù)給客戶端。查詢天以上的平均值時,需要根據(jù)小時平均值計算出天平均值,以此類推計算出相關的平均值。
因此,本發(fā)明的優(yōu)點是:將數(shù)據(jù)根據(jù)時間區(qū)分存入若干平均值文件內,每個文件都具有便于檢索的存儲結構,這使得用戶能夠快速進行查詢,減少了平均值查詢花費時間,在足夠大硬盤支持下,可以查詢更長的區(qū)間數(shù)據(jù),解決了傳統(tǒng)查詢系統(tǒng)中因存儲數(shù)據(jù)增加,影響查詢速度,需要每隔一段時間刪除部分數(shù)據(jù),保存數(shù)據(jù)有限的問題。本發(fā)明通過平均值文件以設定存儲結構進行存儲數(shù)據(jù),使得能保存更長時間的數(shù)據(jù)平均值,并且查詢復雜度恒定,查詢時間不會因為時間越久而速度越慢。
附圖說明
附圖1是本發(fā)明的一種結構框示圖;
附圖2是本發(fā)明中環(huán)狀數(shù)據(jù)緩沖單元的一種存儲結構示意圖;
附圖3是本發(fā)明中平均值文件的一種存儲結構示意圖;
附圖4是本發(fā)明中平均值存儲步驟示意圖;
附圖5是本發(fā)明中數(shù)據(jù)查詢步驟示意圖。
1-服務器端 2-客戶端 3-數(shù)據(jù)源 4-數(shù)據(jù)采集單元 5-環(huán)狀數(shù)據(jù)緩沖單元 6-平均值處理單元 7-平均值文件單元 8-數(shù)據(jù)查詢單元 9-數(shù)據(jù)查詢請求單元。
具體實施方式
下面通過實施例,并結合附圖,對本發(fā)明的技術方案作進一步具體的說明。
實施例:
本實施例一種歷史平均值管理系統(tǒng),如圖1所示,系統(tǒng)包括客戶端2和服務器端1,客戶端包括數(shù)據(jù)查詢請求單元9,服務器端包括數(shù)據(jù)查詢單元8、數(shù)據(jù)源3、數(shù)據(jù)采集單元4、環(huán)狀數(shù)據(jù)緩沖單元5、平均值處理單元6、平均值文件單元7。數(shù)據(jù)源、數(shù)據(jù)采集單元、環(huán)狀數(shù)據(jù)緩沖單元、平均值處理單元、平均值文件單元順序連接,數(shù)據(jù)查詢單元分別與環(huán)狀數(shù)據(jù)緩沖單元、平均值文件單元相連接,數(shù)據(jù)查詢請求單元通過網(wǎng)絡與數(shù)據(jù)查詢單元相連接。
服務器端:用于平均值計算與存儲的設備,提供數(shù)據(jù)采集,平均值計算,以及提供數(shù)據(jù)查詢,通過網(wǎng)絡通信的方式與客戶端進行通信,傳輸數(shù)據(jù)。
客戶端:用戶向服務器端發(fā)送查詢請求,并將查詢結果進行后續(xù)處理的設備。
數(shù)據(jù)源:采用實時數(shù)據(jù)庫,用于現(xiàn)代工業(yè)監(jiān)控系統(tǒng)中的數(shù)據(jù)采集和存儲。
數(shù)據(jù)采集單元:安裝在服務器端,采集位號的實時數(shù)據(jù)。位號是底層物理設備所提供的數(shù)據(jù)點在實時數(shù)據(jù)庫中的唯一編號,除此之外還可能包括實時庫服務運行所需的其他虛擬點在實時數(shù)據(jù)庫中的唯一編號,是服務器端中對應的唯一索引。
環(huán)狀數(shù)據(jù)緩沖單元:接收數(shù)據(jù)采集單元壓入的數(shù)據(jù),通過環(huán)形保存方式,不間斷進行數(shù)據(jù)壓入,同時向平均值文件單元寫入數(shù)據(jù)。
平均值處理單元:對環(huán)狀數(shù)據(jù)緩沖單元中的數(shù)據(jù)進行分鐘平均值計算,小時平均值計算,以及其他平均值進行計算。
數(shù)據(jù)查詢請求單元:用戶通過數(shù)據(jù)查詢單元向服務器端發(fā)送查詢請求。
數(shù)據(jù)查詢單元:根據(jù)客戶端查詢請求從環(huán)狀數(shù)據(jù)緩沖單元和平均值文件單元查詢相應數(shù)據(jù)。
如圖2所示,環(huán)狀數(shù)據(jù)緩沖單元的存儲結構包括緩存頭、位號頭、若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊,若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊分別都以循環(huán)讀寫方式呈環(huán)形分布;
緩存頭:保存所有位號總數(shù)和最近一次讀取緩存中平均值數(shù)據(jù)塊的時間;
位號頭:保存位號名稱,位號瞬時值的讀指針、寫指針,位號平均值的讀指針、寫指針;
平均值數(shù)據(jù)塊:保存分鐘平均值和分鐘時間;
瞬時值數(shù)據(jù)塊:保存瞬時值和寫入的時間。
如圖3所示,平均值文件單元包括若干平均值文件,平均值文件的存儲結構包括歷史文件頭、一級索引、若干二級索引和若干數(shù)據(jù)塊;
歷史文件頭:保存文件標示、文件版本、字節(jié)序、開始時間、結束時間和位號總數(shù);
一級索引:結構包括若干位號頭,每個對應的位號頭保存位號名稱和二級索引地址;
二級索引:結構包括順序排列的索引頭、上一塊二級索引地址、下一塊二級索引地址、若干小時平均值結構體和若干數(shù)據(jù)塊地址結構體;索引頭保存每個位號對應的一級索引地址,上一塊二級索引地址保存與位號上方相鄰的二級索引地址,下一塊二級索引地址保存與位號下方相鄰的二級索引地址,小時平均值結構體保存小時時段和小時平均值,數(shù)據(jù)塊地址結構體保存分鐘段開始時間、分鐘段結束時間和對應數(shù)據(jù)塊地址;
數(shù)據(jù)塊:結構包括順序排列的數(shù)據(jù)塊索引頭、若干分鐘平均值結構體;數(shù)據(jù)索引頭保存對應二級索引地址,分鐘平均值結構體保存分鐘段時間和平均值。
一種歷史平均值管理系統(tǒng)管理方法,包括平均值存儲步驟和數(shù)據(jù)查詢步驟。
如圖4所示,平均值存儲步驟包括以下步驟:
SS1.定義環(huán)狀數(shù)據(jù)緩沖單元和平均值文件單元的存儲結構;
定義環(huán)狀數(shù)據(jù)緩沖單元的存儲結構為:
包括緩存頭、位號頭、若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊,若干平均值數(shù)據(jù)塊和若干瞬時值數(shù)據(jù)塊分別都以循環(huán)讀寫方式呈環(huán)形分布;
緩存頭:保存有位號總數(shù)和最近一次讀取緩存中平均值數(shù)據(jù)塊的時間;
位號頭:保存位號名稱,位號瞬時值的讀指針、寫指針,位號平均值的讀指針、寫指針;
平均值數(shù)據(jù)塊:保存分鐘平均值和分鐘時間;本實施例中以采用20分鐘平均值區(qū)間為例,也就是最大20個平均值記錄,以循環(huán)方式寫入和讀取,平均值記錄區(qū)間長度可以根據(jù)具體要求做相應的增加或刪除。
瞬時值數(shù)據(jù)塊:保存瞬時值和寫入的時間。本實施例中以采用20分鐘瞬時值區(qū)間為例,也就是最大1200個瞬時值記錄,以循環(huán)的方式寫入與讀取,可根據(jù)要求做相應的增加或刪除。
本實施例以10分鐘一次數(shù)據(jù)寫入為例,只要在下一個10分鐘到來之前完成平均值數(shù)據(jù)的寫入,那這個系統(tǒng)是有效的,如果全部位號一次平均值寫文件不能在10分鐘內完成,那么就需要增加環(huán)狀數(shù)據(jù)緩沖單元的存儲空間長度。
定義平均值文件單元的存儲結構為:
包括若干平均值文件,平均值文件的存儲結構包括歷史文件頭、一級索引、若干二級索引和若干數(shù)據(jù)塊;
歷史文件頭:保存文件標示、文件版本、字節(jié)序、開始時間、結束時間和位號總數(shù);
一級索引:結構包括若干位號頭,每個對應的位號頭保存位號名稱和二級索引地址;通過需要保持平均值的位號總數(shù),預先設置一段位號頭長度乘以位號總數(shù)的預留空間,假設位號總個數(shù)為M,位號頭在服務器端上的長度為N,那一級索引所需的空間就是M*N的長度。存儲時,將每個位號和對應的二級索引地址依次填入地址空間。二級索引地址由每個二級索引的總長度計算而來。
二級索引:結構包括順序排列的索引頭、上一塊二級索引地址、下一塊二級索引地址、若干小時平均值結構體和若干數(shù)據(jù)塊地址結構體;索引頭保存每個位號對應的一級索引地址,上一塊二級索引地址保存與位號上方相鄰的二級索引地址,下一塊二級索引地址保存與位號下方相鄰的二級索引地址,小時平均值結構體保存小時時段和小時平均值,數(shù)據(jù)塊地址結構體保存分鐘段開始時間、分鐘段結束時間和對應數(shù)據(jù)塊地址;本實施例以一天的時間段作為一個平均值文件,小時平均值需要至少預留n+1個小時的預留長度也就是25個小時平均值結構體的長度。本實施例以數(shù)據(jù)塊記錄10分鐘平均值為例,則一個位號需要1440/10=144個數(shù)據(jù)塊,則對應的也有144個數(shù)據(jù)塊地址結構體。假設二級索引的索引頭、上一塊二級索引地址、下一塊二級索引地址的總長度為A,一個小時平均值結構體長度為B,一個地址數(shù)據(jù)塊結構體長度為C,則一個二級索引的長度為:A+B*25+C*144。由于每個二級索引長度是固定的,一級索引所要填寫的二級索引地址就是根據(jù)第一個二級索引開始地址逐個加上二級索引的長度就能得出。數(shù)據(jù)塊地址結構中的數(shù)據(jù)地址,由每個數(shù)據(jù)塊總長度計算而來。
數(shù)據(jù)塊:結構包括順序排列的數(shù)據(jù)塊索引頭、若干分鐘平均值結構體;數(shù)據(jù)索引頭保存對應二級索引地址,分鐘平均值結構體保存分鐘段時間和平均值。
SS2.通過計時,計算環(huán)狀數(shù)據(jù)緩沖單元內所有位號一分鐘平均值并進行存儲;
計時操作為開啟定時器,每秒觸發(fā)一次,服務器端判斷當前時間離上一次計算分鐘平均值的時間是否超過一分鐘,若否進入步驟SS3,若是則進行所有位號的分鐘平均值計算,將計算的分鐘平均值寫入環(huán)狀數(shù)據(jù)單元指定位置內。
其中分鐘平均值計算過程為:
獲取環(huán)狀數(shù)據(jù)緩沖單元中對應的瞬時值讀指針,從讀指針開始找到指定分鐘前的一個瞬時值,以及分鐘時間段內所有瞬時值,從指定分鐘的第1秒開始,判斷當前秒是否有瞬時值,若有則繼續(xù)往下一秒執(zhí)行,若無則用當前秒前的瞬時值作為當前秒瞬時值,如此操作直至補齊整個60秒內的瞬時值,最后對60個瞬時值取平均值得到分鐘平均值。
SS3.通過計時,相隔設定分鐘,將該時間段內所有分鐘平均值寫入對應平均值文件;
SS31.判斷當前平均值文件是否寫滿,若否進入下一步驟,若是則新建一個平均值文件;
SS32.服務器端將當前時間與上一次寫設定分鐘平均值的時間進行比較,判斷是否超過設定分鐘,若否返回步驟SS2,若是則獲取環(huán)狀數(shù)據(jù)緩沖區(qū)平均值讀取指針,從平均值讀取指針開始往后找,獲取設定分鐘內所有的分鐘平均值,寫入平均值文件。服務器端將當前時間與上一次寫10分鐘時間段內平均值的時間進行比較,判斷是否超過10分鐘,若否返回步驟SS2,若是則獲取環(huán)狀數(shù)據(jù)緩沖區(qū)平均值讀取指針,從平均值讀取指針開始往后找,獲取10分鐘內所有的分鐘平均值;寫入的具體方法是,通過位號在一級索引中找到二級索引的位置,將之前記錄的寫文件次數(shù)(將一天時間分成144份,每次保存當前寫入的是第幾個10分鐘)作為偏移量,找到該位號的數(shù)據(jù)塊所在位置,然后將10分鐘的平均值寫入數(shù)據(jù)塊中,最后將寫文件次數(shù)增一。
SS4.在當前平均值文件將其所有分鐘平均值寫完畢后,計算小時平均值并關閉文件,返回步驟SS2;
在當前平均值文件將設定分鐘時間段分鐘平均值寫完畢后,判斷平均值文件記錄的寫文件次數(shù)是否達到144次,若否返回步驟SS2,若是則計算整個平均值文件中所有時段的小時平均值,并將計算后的值寫入對應位置,關閉文件,返回步驟SS2。
如圖5所示,數(shù)據(jù)查詢步驟包括以下步驟:
SI1.分析查詢請求,確定查詢時間區(qū)間、查詢類型;
在步驟SI1中,查詢請求包括查詢位號、查詢類型、查詢的起始時間以及結束時間,查詢類型包括分鐘平均值、小時平均值、天平均值、月平均值和年平均值;根據(jù)查詢類型、查詢的起始時間以及結束時間,當查詢分鐘平均值時,剔除當前時間所在分鐘,當查詢小時平均值時,剔除當前時間所在小時,以此類推,以剔除無法完整計算的平均值時段;對查詢類型進行判斷,是否為分鐘平均值、小時平均值、天平均值、月平均值或年平均值;
SI2. 查詢類型為分鐘平均值,根據(jù)查詢時間區(qū)間對應從環(huán)狀數(shù)據(jù)緩沖單元、平均值文件查詢分鐘平均值,進入步驟SI5;
判斷查詢分鐘平均值時間區(qū)間的時間是否都大于環(huán)狀數(shù)據(jù)緩沖單元最后一次記錄的寫入平均值文件的時間,若是從環(huán)狀數(shù)據(jù)緩沖單元中查詢分鐘平均值,若否再判斷分鐘平均值時間區(qū)間是否有部分時間大于環(huán)狀數(shù)據(jù)緩沖單元最后一次記錄的寫入平均值文件的時間,若有則部分時間從環(huán)狀數(shù)據(jù)緩沖單元中查詢分鐘平均值,時間區(qū)間其余部分時間從平均值文件中查詢分鐘平均值;若沒有則直接從平均值文件查詢分鐘平均值;
SI3. 查詢類型為小時平均值,從平均值文件查詢小時平均值,進入步驟SI5;
判斷查詢小時平均值時間區(qū)間對應的小時平均值結構體內數(shù)據(jù)是否為空,若否從平均值文件中查詢小時平均值,若是則計算小時平均值,然后再判斷小時平均值區(qū)間內是否有一個小時跨越兩個平均值文件,若無進入步驟SI5,若有則對該跨越小時的平均值進行重新計算,跨越小時平均值=(W*V1+U*V2)/60 ,其中W為跨越小時前一個小時的小時平均值,U為跨越小時后一個小時的小時平均值,V1為前一個平均值文件結束時間的分鐘值,V2為后一個平均值文件開始時間的分鐘值
SI4. 查詢類型為天、月或年平均值,根據(jù)步驟IS3獲取查詢時間區(qū)間內小時平均值,根據(jù)小時平均值計算出天、月或年平均值;
根據(jù)小時平均值進行計算,返回數(shù)據(jù)給客戶端,若否也返回數(shù)據(jù)給客戶端;
SI5. 將查詢的數(shù)據(jù)返回數(shù)據(jù)給客戶端。
本文中所描述的具體實施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術領域的技術人員可以對所描述的具體實施例做各種各樣的修改或補充或采用類似的方式替代,但并不會偏離本發(fā)明的精神或者超越所附權利要求書所定義的范圍。
盡管本文較多地使用了服務器端、客戶端、數(shù)據(jù)源、數(shù)據(jù)采集單元等術語,但并不排除使用其它術語的可能性。使用這些術語僅僅是為了更方便地描述和解釋本發(fā)明的本質;把它們解釋成任何一種附加的限制都是與本發(fā)明精神相違背的。