
本發(fā)明涉及數(shù)據(jù)存儲以及查詢的技術(shù)領(lǐng)域,尤其涉及智能電表的數(shù)據(jù)存儲和查詢方法及其系統(tǒng)。
背景技術(shù):智能電表是智能電網(wǎng)(特別是智能配電網(wǎng))數(shù)據(jù)采集的基本設(shè)備之一,承擔(dān)著原始電能數(shù)據(jù)采集、計量和傳輸?shù)娜蝿?wù),是實現(xiàn)信息集成、分析優(yōu)化和信息展現(xiàn)的基礎(chǔ)。隨著市場的發(fā)展,人們對智能電表的需求也在不斷提高,其中,對采集數(shù)據(jù)的種類和頻度都提出了更高的要求,越來越多的數(shù)據(jù)需要高效的存儲和查詢。智能電表采集數(shù)據(jù)主要有三個信息需要保存:1、時間;2、數(shù)據(jù)類型;3、數(shù)據(jù)內(nèi)容。最初人們采用的存儲方案是按順序依次存儲,即每次采集到新數(shù)據(jù)后將上述三個信息依次存入存儲flash中上次數(shù)據(jù)的后邊,讀取時從第一份數(shù)據(jù)開始遍歷,直到找到需要的數(shù)據(jù)。這種方案存儲數(shù)據(jù)時不留空隙,空間利用比較充分,但查找數(shù)據(jù)時需要全部遍歷,搜索速度比較慢。為了提高搜索速度,后來人們多采用定長間隔存儲的方案,即按照最大數(shù)據(jù)長度來設(shè)置存儲間隔,查詢時根據(jù)起始時刻和查找時刻的時間差可以直接算出需要查詢的數(shù)據(jù)存放的偏移地址。這種方案查詢快速,但當(dāng)數(shù)據(jù)不規(guī)則時浪費了大量的存儲空間,在有限的存儲空間內(nèi)保存的有效信息比較少。由此可見,現(xiàn)有的技術(shù)要么偏重空間利用的最大化,查詢速度非常慢;要么偏重查詢數(shù)據(jù)的速度,存儲空間非常浪費,都不能很好的達到查詢速度和空間利用的最佳平衡。
技術(shù)實現(xiàn)要素:本發(fā)明的特征和優(yōu)點在下文的描述中部分地陳述,或者可從該描述顯而易見,或者可通過實踐本發(fā)明而學(xué)習(xí)。為克服現(xiàn)有技術(shù)的問題,本發(fā)明提供一種智能電表的數(shù)據(jù)存儲方法及其系統(tǒng),將時間依據(jù)數(shù)據(jù)的采集周期劃分成復(fù)數(shù)個時間段,將數(shù)據(jù)依據(jù)采集時間所處的時間段存儲在存儲區(qū)域的存儲頁面內(nèi),并在不具有該數(shù)據(jù)的時間段內(nèi)保存為空數(shù)據(jù),無需記錄每個數(shù)據(jù)的時間,節(jié)約了存儲空間;同時通過在每頁存儲頁面內(nèi)記錄第一個數(shù)據(jù)的時間的技術(shù)手段,加快了數(shù)據(jù)查詢的速度,很好地達到了查詢速度和空間利用之間的平衡。本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案如下:根據(jù)本發(fā)明的一個方面,提供一種智能電表的數(shù)據(jù)存儲方法,包括:確定存儲區(qū)域具有復(fù)數(shù)個存儲頁面,若該存儲區(qū)域不具有該存儲頁面,則依據(jù)該存儲區(qū)域的大小將該存儲區(qū)域劃分成復(fù)數(shù)個該存儲頁面;將時間劃分成復(fù)數(shù)個時間段,每個該時間段在該存儲頁面上占據(jù)一定的存儲空間;將該數(shù)據(jù)依據(jù)采集時間所處的時間段存儲在該存儲頁面內(nèi),若在某一時間段內(nèi)不具有該數(shù)據(jù),則在不具有該數(shù)據(jù)的時間段內(nèi)保存為空數(shù)據(jù);在每頁該存儲頁面內(nèi)記錄第一個數(shù)據(jù)的時間。根據(jù)本發(fā)明的一個實施例,在將該數(shù)據(jù)依據(jù)采集時間所處的時間段存儲在該存儲頁面內(nèi)時,首先計算存儲該數(shù)據(jù)需要的存儲空間,若該存儲頁面內(nèi)存儲空間不足,則開啟新的存儲頁面。根據(jù)本發(fā)明的一個實施例,在將該數(shù)據(jù)依據(jù)采集時間所處的時間段存儲在該存儲頁面內(nèi)時,首先讀取上次保存的數(shù)據(jù)的信息,若該上次保存的數(shù)據(jù)為該空數(shù)據(jù),且本次保存的數(shù)據(jù)也為該空數(shù)據(jù),則在上次保存的該空數(shù)據(jù)的存儲空間里更新空數(shù)據(jù)的個數(shù)。根據(jù)本發(fā)明的一個實施例,在該存儲頁面的還需要記錄前一次數(shù)據(jù)存放的偏移、該存儲頁面存放的數(shù)據(jù)的類型、該存儲頁面存放的數(shù)據(jù)的份數(shù)。根據(jù)本發(fā)明的又一個方面,提供一種智能電表的數(shù)據(jù)查詢方法,用于查詢采用上述任一智能電表的數(shù)據(jù)存儲方法進行存儲的數(shù)據(jù),包括:S1、讀取第一頁以及最后一頁存儲頁面內(nèi)記錄的第一個數(shù)據(jù)的時間;S2、根據(jù)需要查詢的數(shù)據(jù)的時間,按照比例關(guān)系計算該需要查詢的數(shù)據(jù)所處的存儲頁面;S3、讀取S2計算所得的存儲頁面內(nèi)第一個數(shù)據(jù)的存儲時間、該頁面存放的數(shù)據(jù)的類型、該頁面存放的數(shù)據(jù)的份數(shù),判斷該需要查詢的數(shù)據(jù)是否在S2計算所得的存儲頁面內(nèi):若在,則依次讀取該需要查詢的數(shù)據(jù)所處的存儲頁面內(nèi)的數(shù)據(jù),直至查詢出該需要查詢的數(shù)據(jù);若不在,則判斷該需要查詢的數(shù)據(jù)在計算得出的該需要查詢的數(shù)據(jù)所處的存儲頁面之前還是之后,然后根據(jù)判斷的結(jié)果重新計算該需要查詢的數(shù)據(jù)所處的存儲頁面;如果在計算得出的該需要查詢的數(shù)據(jù)所處的存儲頁面之前,則將計算得出的該需要查詢的數(shù)據(jù)所處的存儲頁面作為最后一頁,按照比例關(guān)系重新計算該需要查詢的數(shù)據(jù)所處的存儲頁面;如果在計算得出的該需要查詢的數(shù)據(jù)所處的存儲頁面之后,則將計算得出的該需要查詢的數(shù)據(jù)所處的存儲頁面作為第一頁,按照比例關(guān)系重新計算該需要查詢的數(shù)據(jù)所處的存儲頁面;重復(fù)步驟S3,直至查詢出該需要查詢的數(shù)據(jù)。根據(jù)本發(fā)明的一個實施例,在該步驟S3中,還要讀取與該需要查詢的數(shù)據(jù)所處的存儲頁面相鄰的存儲頁面內(nèi)該第一個數(shù)據(jù)的時間,并據(jù)此判斷該需要查詢的數(shù)據(jù)是否在該需要查詢的數(shù)據(jù)所處的存儲頁面內(nèi),或判斷該需要查詢的數(shù)據(jù)在計算得出的該需要查詢的數(shù)據(jù)所處的存儲頁面之前還是之后。根據(jù)本發(fā)明的再一個方面,提供一種智能電表的數(shù)據(jù)查詢系統(tǒng),用于查詢采用上述任一智能電表的數(shù)據(jù)存儲方法進行存儲的數(shù)據(jù),包括:時間讀取模塊,用于讀取存儲頁面內(nèi)記錄的第一個數(shù)據(jù)的時間;計算模塊,用于根據(jù)需要查詢的數(shù)據(jù)的時間,按照比例關(guān)系計算該需要查詢的數(shù)據(jù)所處的存儲頁面;判斷模塊,用于判斷該需要查詢的數(shù)據(jù)是否在該需要查詢的數(shù)據(jù)所處的存儲頁面內(nèi),或判斷該需要查詢的...