本發明專利技術公開了一種實時數據的無損壓縮方法及系統,由兩個模塊組成,分別為壓縮解壓模塊和內存池模塊;所述壓縮解壓縮是本系統的主模塊,負責實時數據的無損壓縮和解壓縮,其主要操作方法步驟包括:初始化系統;將未處理數據與滑動窗口內數據匹配,獲取最大匹配字符串的長度以及偏移位置,如圖1所示;將長度和偏移位置與最近產生的匹配字符串的長度和偏移位置做比較;根據比較情況輸出對應的結果;同時為實時數據庫壓縮解壓縮進程配備一個內存池以提高性能。采用本發明專利技術能在保證壓縮率的前提下,大大減少了內存的消耗,具有較高的性能。
【技術實現步驟摘要】
本專利技術涉及實時數據無損壓縮方法及系統,具體是一種針對實時數據庫經有損壓縮處理后的無損壓縮方法及系統。
技術介紹
實時數據庫(RTDB-Real Time DataBase)是數據庫系統發展的一個分支,是數據庫技術結合實時處理技術產生的。實時數據庫可用于工廠流程的自動采集、儲存和監視,可在線儲存每個工藝過程點的多年數據,可以提供清晰、精確的操作情況畫面,用戶既可瀏覽工廠當前的生產情況,也可回顧過去的生產情況,可以說,實時數據庫對于流程工業系統來說就如同飛機上的“黑匣子”。然而隨著工業技術的發展,現在的大型過程控制系統的實時數據種類繁多,來源復雜,更新速度快,精度要求高,要保存的歷史數據量非常大。因而如果將這些數據直接儲存,會占用非常大的存儲空間,還會對數據的傳輸、備份、分析造成困難。所以實時數據庫系統急需引入數據壓縮技術。實時數據壓縮技術可以分為兩大類,分別是有損壓縮和無損壓縮。大部分實時數據庫系統會先對數據進行有損壓縮,再使用無損壓縮算法進行二次壓縮,以達到更大的壓縮率。目前比較通用的有損壓縮算法主要有兩種,第一種是死區壓縮算法,這種算法較為簡單,它將采集的數據根據預定義的死區進行比較,如果該數據在死區外則記錄該數值,否則濾去該數值;另一種是由美國OSI公司研發的旋轉門壓縮算法(SDT),此算法已經成功的運用在了 PI實時數據庫系統中,此算法主要針對的對象是浮點數據類型的數據,其本質是通過一條由起點到終點確定的直線代替一些連續數據點。實時數據無損壓縮算法很多源自通用無損壓縮算法,包括PPM算法、BWT算法和LZ系列算法等。PPM算法和BWT算法壓縮率較高,但是這兩種壓縮算法耗費的壓縮和解壓縮時間比較長,不滿足實時數據庫的要求。而LZ系列算法較為簡單,壓縮時間更短,擴展性更強,因此本專利技術選擇對LZ系列算法中的LZ77算法進行改進。如圖1所示,LZ77算法又被稱為“滑動窗口壓縮算法”,這是由于該算法維護一個虛擬的,可以跟隨壓縮進程滑動的窗口,這個窗口中的內容即是最近的歷史數據,要壓縮的字符串如果在該窗口中出現,則輸出其長度和出現的位置。而本專利技術對LZ77的改進主要在于處理匹配字符串長度及位置的方式。Wenjun, Huang 等人在 2006 年的 The Sixth World Congress onlntelligentControl and Automation(第六屆世界智能控制和自動化會議)上發表的論文《A LosslessData Compression Algorithm for Real-timeDatabase ( 一種實時數據庫無損數據壓縮算法)》中提出了一種基于LZW算法的實時數據壓縮算法。具體為先計算相鄰數據的差值,并使用RLE算法和改進的LZW算法對差值進行壓縮存儲。但是這種壓縮算法,無論在壓縮和解壓縮過程中都需要大量的浮點型數值運算,會對整個系統運行的時間消耗帶來不利的影響。本專利技術提出的無損壓縮方法計算量小,在壓縮時間和解壓縮時間上具有更大的優勢,特別適合對實時性要求比較高的實時數據庫系統。另外,目前高速發展的工業技術對實時數據庫系統的性能有著很高的要求,一個實時數據壓縮程序在運行的過程中必然需要頻繁地動態申請內存,如此會造成三大隱患:一是容易出現內存泄露;二是會在系統中產生大量的內存碎片,降低系統內存的利用率;三是系統的內存分配函數往往通過系統調用實現,而系統調用比普通函數調用更加耗時。本專利技術通過構建內存池可以緩解這一性能問題。所謂內存池是指在真正使用內存之前,先申請分配一定數量的的內存塊留作備用。當有新的內存需求時,就從內存池中分出一部分內存塊,若內存塊不夠再繼續申請新的內存。
技術實現思路
為了適應實時數據庫壓縮解壓縮進程對實時性的要求,本專利技術提出了一種實時數據的無損壓縮方法及系統,專門針對經有損壓縮后的數據進行二次壓縮。該方法在保證壓縮率的前提下,壓縮與解壓縮時間都具有一定優勢,而且采取優化措施大大減少內存消耗,具有較高的性能。本專利技術解決其技術問題所采用的技術方案是:一種實時數據的無損壓縮方法及系統,其特征在于,由兩個模塊組成,分別是:壓縮解壓模塊和內存池模塊;所述壓縮解壓縮是本系統的主模塊,負責實時數據的無損壓縮和解壓縮,其主要操作方法步驟包括:1、初始化系統;2、將未處理數據與滑動窗口內數據匹配,獲取最大匹配字符串的長度以及偏移位置,如圖1所示;3、將長度和偏移位置與最近產生的匹配字符串的長度和偏移位置做比較;4、根據比較情況輸出對應的結果;在本說明文檔中,使用Ien指代最大匹配字符串的長度;使用off指代最大匹配字符串的偏移位置。上述操作步驟2中進一步包括:考慮最大匹配字符串長度過短的情況,如果依然將(len,off)作為結果輸出,那么此數據段壓縮后的長度甚至可能大于其原始長度,會對壓縮率造成負面影響。因此需要區分出匹配字符串長度過短的情況。本專利技術使用一比特“匹配標志位”來標識兩種情況:1表示直接輸出單字節原始數據;0表示壓縮為匹配字符串長度和偏移位置的形式,即繼續操作步驟3。同時由于以字節為單位儲存數據相對于以位為單位的存儲方式有利于減少耗時,所以本專利技術將相鄰的每8個匹配標志位合并為一個字節進行存儲。在本文檔中,我們將這些字節數據稱為“匹配標志位字節”。上述操作步驟3是本專利技術無損壓縮算法的核心部分和主要創新點。我們通過對過程工業現場數據的分析,發現操作步驟2中獲取的匹配字符串的長度和偏移位置往往會連續多次保持同一個或幾個數值。出現這一現象的原因是原始數據經過有損壓縮的第一次處理后,相鄰數據變化率變大,匹配字符串的潛在長度也大大減少,所以重復的可能性也就變大。根據這個規律,本專利技術操作步驟3中進一步包括:將(len,off)的值與最近三次出現的(len,off)值比較,并使用兩比特“字典標志位”來標識下列四種情況:01表示長度和偏移量等于最近獲取的長度和偏移量;10表示長度和偏移量等于第二近獲取的長度和偏移量;11表示長度和偏移量等于第三近獲取的長度和偏移量;00表示未出現以上三種情況,輸出長度和偏移量的壓縮值。通過這種方法,很多情況下只需要兩比特空間就可以表示幾字節的原始數據,可以達到很好的壓縮效果。最后同樣為了讓數據以字節為單位存儲,本專利技術將相鄰的每4個字典標志位合并為一個字節進行儲存。在本文檔中,我們將這些數據稱為“字典標志位字節”。所述匹配字符串長度Ien和所述偏移量off的壓縮也有兩種方式,如圖3所示:當Ien值不超過6且off值不超過32時,只使用一個字節保存;當Ien值超過6或off值超過32時,采用兩字節保存。這種做法同樣也是引入Huffman算法的思想起到增大壓縮率的效果。所述內存池模塊的提出是為了解決因大量申請釋放小塊內存所產生的問題,其作用是:在堆中預先申請一大塊內存空間,當實時數據庫系統需要動態分配和釋放內存時,都是通過對這個內存池的操作完成,所得到的內存也來源于這個內存池,而不是調用系統的動態內存分配函數再去堆中申請內存。其中在系統初始化階段,就要為這個內存池構建空閑空間鏈表,在內存池的運行過程中要不斷更新這個空閑空間鏈表。同時,本實時數據壓縮系統可以通過多線程執行,所以在操作內存池時也要加上互斥鎖以實現臨界區的互斥。本專利技術的有本文檔來自技高網...
【技術保護點】
一種實時數據的無損壓縮方法及系統,其特征在于,由兩個模塊組成,分別是:壓縮解壓模塊和內存池模塊;所述壓縮解壓縮是本系統的主模塊,負責實時數據的無損壓縮和解壓縮,其主要操作方法步驟包括:(1)、初始化系統;(2)、將未處理數據與滑動窗口內數據匹配,獲取最大匹配字符串的長度以及偏移位置,如圖1所示;(3)、將長度和偏移位置與最近產生的匹配字符串的長度和偏移位置做比較;(4)、根據比較情況輸出對應的結果;同時為實時數據庫壓縮解壓縮進程配備一個內存池以提高性能。
【技術特征摘要】
【專利技術屬性】
技術研發人員:盧學東,楊永軍,孫益,程相杰,張旭,田興東,吳景彪,
申請(專利權)人:上海麥杰科技股份有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。