龍海軍 姚光霖
摘 要:本文通過對有損壓縮和無損壓縮的分析,給出一種二次數(shù)據(jù)壓縮方法,統(tǒng)一有損壓縮和無損壓縮的應(yīng)用,對歷史庫的數(shù)據(jù)進行壓縮。試驗表明,此方法到達了數(shù)據(jù)壓縮的目的,又完整地保留了邏輯壓縮后的數(shù)據(jù)信息。
關(guān)鍵詞:核電站DCS Historian數(shù)據(jù)壓縮 模擬量數(shù)據(jù)壓縮 改進旋轉(zhuǎn)門數(shù)據(jù)壓縮
中圖分類號:TM862 文獻標識碼:A 文章編號:1672-3791(2013)03(b)-0029-02
1 研究背景
核電DCS控制系統(tǒng)中的歷史數(shù)據(jù)庫需要具備較高實時性、海量數(shù)據(jù)吞吐量的特點,因此在長時間系統(tǒng)運行的前提下,會產(chǎn)生巨大的歷史數(shù)據(jù)量,如果將這些數(shù)據(jù)直接存儲,不僅會浪費很多的存儲空間,而且還會使得數(shù)據(jù)查詢、傳輸變得復雜而困難。因此,將數(shù)據(jù)壓縮技術(shù)引入到DCS系統(tǒng)的歷史數(shù)據(jù)處理中,可以達到節(jié)省存儲空間、增加庫容量和提升系統(tǒng)運行效率等優(yōu)勢。
2 數(shù)據(jù)壓縮技術(shù)簡介
歷史數(shù)據(jù)庫的數(shù)據(jù)壓縮是傳統(tǒng)數(shù)據(jù)壓縮技術(shù)在DCS工控領(lǐng)域的特殊應(yīng)用,一般數(shù)據(jù)壓縮算法可以分為無損壓縮和有損壓縮兩種技術(shù)。
有損壓縮技術(shù)是根據(jù)特定的應(yīng)用領(lǐng)域而發(fā)展起來的,它的基本原理是在數(shù)據(jù)壓縮過程中損失一定的信息以獲得較高的壓縮比,并且壓縮過程不可逆,壓縮后的數(shù)據(jù)不能完全地恢復到原始狀態(tài),因此需要保證損失的數(shù)據(jù)對于理解原始數(shù)據(jù)信息特點的影響不大。具體到工控行業(yè)使用較多的壓縮算法包括:Hale和Sellars共同提出的矩形波串法(Box Car)和后向斜率發(fā)(Back ward Slope),以及在工控領(lǐng)域應(yīng)用最為廣泛的OSIsoft公司提出的“旋轉(zhuǎn)門數(shù)據(jù)壓縮算法(Swing Door)”[1,2]。
無損壓縮技術(shù)是利用數(shù)據(jù)的統(tǒng)計冗余進行壓縮,可完全回復原始數(shù)據(jù)而不引起任何失真,但壓縮率是受到數(shù)據(jù)統(tǒng)計冗余度的理論限制,一般為2∶1~5∶1。這類方法廣泛用于文本數(shù)據(jù),程序和特殊應(yīng)用場合的圖像數(shù)據(jù)(如指紋圖像,醫(yī)學圖像等)的壓縮。無論是無損壓縮還是有損壓縮,都在工控領(lǐng)域的歷史數(shù)據(jù)處理中得到了應(yīng)用,例如美國的Instep公司開發(fā)的實時歷史數(shù)據(jù)庫系統(tǒng)eDNA就實現(xiàn)了以Huffman為基本的無損數(shù)據(jù)壓縮程序,它首先對數(shù)據(jù)集合進行統(tǒng)計分析,將數(shù)據(jù)添加到Huffman樹中進行編碼,最后保存生成編碼,完成對數(shù)據(jù)群的壓縮;而OSIsoft公司的PI實時歷史數(shù)據(jù)庫產(chǎn)品采用了“旋轉(zhuǎn)門數(shù)據(jù)壓縮算法”以及獨到的二次過濾技術(shù)。
本論文所闡述的歷史數(shù)據(jù)(Historian)壓縮模塊,我們綜合了兩種壓縮算法的優(yōu)劣,設(shè)計了一套“二次數(shù)據(jù)壓縮”機制,統(tǒng)一無損壓縮和有損壓縮算法應(yīng)用,對歷史庫模擬量數(shù)據(jù)的壓縮。下面我們就具體來看些歷史數(shù)據(jù)(Historian)壓縮算法的設(shè)計。
3 歷史數(shù)據(jù)(Historian)壓縮模塊的設(shè)計
歷史數(shù)據(jù)(Historian)支持的數(shù)據(jù)類型包括開關(guān)量數(shù)據(jù)和模擬量數(shù)據(jù)。由于不同的數(shù)據(jù)類型所表現(xiàn)的數(shù)據(jù)特點的不同,需要設(shè)計針對性的壓縮策略來滿足各種數(shù)據(jù)的壓縮要求。
3.1 開關(guān)量數(shù)據(jù)壓縮
開關(guān)量數(shù)據(jù)采用“變化壓縮算法”,算法基本的設(shè)計思路是:當測點的數(shù)值發(fā)生變化時才會保存,否則丟棄當前數(shù)據(jù)。這是因為開關(guān)量測點的狀態(tài)一般由特定的0或1來表示,在DCS生產(chǎn)現(xiàn)場,有很多開關(guān)量測點的狀態(tài)在特定甚至是很長的時間內(nèi)是不會發(fā)生變化的,所以“變化壓縮算法”非常適合對歷史庫開關(guān)量數(shù)據(jù)的壓縮處理。
如圖1所示,設(shè)置某開關(guān)量測點每1秒進行一個數(shù)據(jù)值采集,以時刻點t為基準的后8s里,其測點值分別為0、0、0、1、1、0、0、1。根據(jù)“變化壓縮算法”的計算,剔除其在2 s、3 s、5 s和7 s的數(shù)據(jù),只保存1 s、4 s、6 s和8 s的數(shù)據(jù)值。而當進行數(shù)據(jù)還原時,空缺時刻的數(shù)據(jù)值取前一保存時刻的數(shù)據(jù),例如,2 s和3 s的數(shù)值均等于1 s數(shù)值0。這樣即完整的保存了測點在時間軸上的數(shù)據(jù)特征,又起到了節(jié)省存儲空間的目的。
3.2 模擬量數(shù)據(jù)壓縮
在DCS系統(tǒng)中的模擬量測點數(shù)據(jù)一般都會遵循一定的漸變規(guī)律,例如有的時間段會呈現(xiàn)較為一致的線性變化,有的時間段的數(shù)據(jù)特征為一條拋物線等。這些數(shù)據(jù)特征就給定了我們做歷史數(shù)據(jù)邏輯壓縮的前提。
在歷史數(shù)據(jù)(Historian)系統(tǒng)中,我們采用雙重的歷史數(shù)據(jù)壓縮機制,即“二次數(shù)據(jù)壓縮”,實現(xiàn)流行的“旋轉(zhuǎn)門”壓縮算法為第一層邏輯壓縮,實現(xiàn)無損的Huffman壓縮算法為第二層物理壓縮。首先來討論下傳統(tǒng)的“旋轉(zhuǎn)門”壓縮算法的內(nèi)容。
3.2.1 傳統(tǒng)的“旋轉(zhuǎn)門”壓縮算法
如圖2所示,基本的“旋轉(zhuǎn)門壓縮算法”是這樣描述的:在進行數(shù)據(jù)壓縮時,算法將新的實時數(shù)據(jù)點和前一個被保留的數(shù)據(jù)點之間做一個平行四邊形的偏移覆蓋區(qū),如果這一平行四邊形可以覆蓋保留數(shù)據(jù)點之后出現(xiàn)的所有數(shù)據(jù)點時,那么將不會保存新的實時數(shù)據(jù)點。反之如果有任何一個數(shù)據(jù)點落在壓縮偏移覆蓋區(qū)外,則新數(shù)據(jù)點的前一個點將被保留,同時整個壓縮偏移覆蓋區(qū)將被重置,以新的被保留點作為新的起點,進入下一輪的旋轉(zhuǎn)門判斷[3]。
傳統(tǒng)的“旋轉(zhuǎn)門”壓縮算法雖然可以較好的完成對實時歷史數(shù)據(jù)的壓縮,但是在算法的實現(xiàn)和執(zhí)行過程中會出現(xiàn)一些問題,主要體現(xiàn)在以下兩點。
(1)算法實現(xiàn)時需要一個臨時緩沖區(qū)來存儲待判定點集,但是在代碼實現(xiàn)時,這一緩沖區(qū)的大小缺失無法事先確定的。
(2)如果待判定點過多,緩沖區(qū)里的數(shù)據(jù)點數(shù)過大,那么在進行覆蓋區(qū)判定時會耗去系統(tǒng)過多的業(yè)務(wù)執(zhí)行時間,造成系統(tǒng)運行的瓶頸。
因此,在以上算法的基礎(chǔ)上,我們采用了改進的“旋轉(zhuǎn)門”壓縮算法,即“斜率比較旋轉(zhuǎn)門”算法[4,5]。
3.2.2 改進的“斜率比較旋轉(zhuǎn)門”壓縮算法
如圖3所示,當新點a到來時,系統(tǒng)會比較a與原點o(即上已存儲的點)的時間差t_time,如果t_time不小于壓縮間隔上限nic_compinterval或者a點質(zhì)量戳與o點不同,則直接保存lastpoint點,進入下一輪旋轉(zhuǎn)門算法運算;否則以點a和o以及設(shè)定好的nic_comprate構(gòu)建平行四邊形Ω,計算最大斜率點maxkpoint和最小斜率點minkpoint是否均在Ω內(nèi),計算結(jié)果有兩種。
(1)都落在了Ω內(nèi)部,則說明a點通過了旋轉(zhuǎn)門,成為最新的lastpoint,最后再分別比較a點斜率與最大、最小斜率的關(guān)系,大于最大斜率值或者小于最小斜率值則替換掉相應(yīng)的斜率點和斜率值,進入下一輪旋轉(zhuǎn)門算法運算。
(2)如果有一個斜率點落在了Ω外部,則說明a點沒有通過旋轉(zhuǎn)門,那么就保存此時的lastpoint,并將lastpoint點設(shè)定為下一輪旋轉(zhuǎn)門算法的o點,a點設(shè)定為最大和最小斜率點,進入下一輪旋轉(zhuǎn)門算法運算。
改進的“旋轉(zhuǎn)門”算法的具體流程圖如圖4所示。
以上介紹的“旋轉(zhuǎn)門”壓縮算法是系統(tǒng)第一次對歷史數(shù)據(jù)的邏輯壓縮,當經(jīng)過邏輯壓縮后的保留數(shù)據(jù)積累到一定的數(shù)量時,例如1k,再對其進行第二次的物理壓縮。物理壓縮采用的是Huffman無損壓縮算法,它的基本原理是,構(gòu)建一個用于字符編碼的Huffman二叉樹,根據(jù)待壓縮數(shù)據(jù)二進制子串出現(xiàn)的頻率對其進行排列,出現(xiàn)頻率大的串使用較少的位表示,較小的串使用較多的編碼來表示,這樣既到達了數(shù)據(jù)壓縮的目的,又完整地保留了邏輯壓縮后的數(shù)據(jù)信息。
4 結(jié)語
通過對無損壓縮算法和有損壓縮算法的對比分析研究,我們充分利用了兩種算法的優(yōu)點,設(shè)計了“二層壓縮”算法,同時將“二次壓縮”算法應(yīng)用于歷史數(shù)據(jù)(Historian)壓縮模塊的設(shè)計和實現(xiàn)中,形成了一種較為先進的技術(shù)實現(xiàn)手段,在工程應(yīng)用中取得了良好的效果。
參考文獻
[1] 高寧波,金宏,王宏安.歷史數(shù)據(jù)實時壓縮方法研究[J].計算機功能與應(yīng)用,2004,28:167-171.
[2] Bristol,E.H.Swing Door Trending: Adaptive Trend Recording,ISA National Conference Proceedings,1990:749-753.
[3] 蔣鵬,黃清波,王智,等.一種新的化工過程歷史數(shù)據(jù)壓縮方法研究[J].浙江大學學報,2005,39(6):814-818.
[4] 徐慧.實時數(shù)據(jù)庫中數(shù)據(jù)壓縮算法的研究[D].杭州:浙江大學,2006.
[5] 馮磊,李俊,夏雨人.計算機控制系統(tǒng)中歷史數(shù)據(jù)存儲與查詢的一種方法[J].計算機工程,2003,29(3):108-110.
[6] 黃靜.LZW壓縮算法VC實現(xiàn)、改進及其應(yīng)用研究[D].長沙:中南大學,2007.李湘.分布式實時數(shù)據(jù)庫及數(shù)據(jù)壓縮算法研究[D].北京:北京科技大.