顧明
(阜新高等??茖W校,遼寧阜新,123000)
隨著現(xiàn)代網(wǎng)絡(luò)技術(shù)的深入發(fā)展與應(yīng)用,大量的信息數(shù)據(jù)隨之產(chǎn)生,這些數(shù)據(jù)包含許多有價值信息需通過進一步挖掘分析以供使用,促使處理大規(guī)模數(shù)據(jù)的相關(guān)技術(shù)不斷發(fā)展完善,已經(jīng)成為研究大數(shù)據(jù)處理領(lǐng)域的重點之一,在優(yōu)化解決大數(shù)據(jù)處理方面,數(shù)據(jù)流分類壓縮并行算法表現(xiàn)出了較大的應(yīng)用優(yōu)勢。
物聯(lián)網(wǎng)發(fā)展及功能的實現(xiàn)產(chǎn)生大量實時數(shù)據(jù),這些數(shù)據(jù)需作為歷史數(shù)據(jù)被保存下來以供后續(xù)使用,直接存入數(shù)據(jù)庫的方式在降低數(shù)據(jù)庫實時性的同時需較大的存儲空間,增加了數(shù)據(jù)庫的壓力及用戶對數(shù)據(jù)的使用難度。實時記錄和查詢數(shù)據(jù)是實時數(shù)據(jù)庫的基本功能,數(shù)據(jù)規(guī)模不斷擴大的實時數(shù)據(jù)庫對所使用到的數(shù)據(jù)壓縮算法的要求不斷提高,實現(xiàn)對數(shù)據(jù)高效準確的壓縮和解壓過程,對大量數(shù)據(jù)進行存儲的實時數(shù)據(jù)庫通常需并行采取多種存儲方式完成。在現(xiàn)有壓縮技術(shù)研究成果中,目前以旋轉(zhuǎn)門算法、PPM壓縮算法較為常用,但普遍存在有損壓縮的問題,無法滿足高精度的數(shù)據(jù)存儲要求。為此本文主要對實時數(shù)據(jù)庫中的數(shù)據(jù)壓縮算法進行了研究,設(shè)計了一種無損數(shù)據(jù)壓縮方案,以期更好的為生產(chǎn)活動服務(wù)。
針對實時數(shù)據(jù)庫需以被壓縮數(shù)據(jù)特點為依據(jù)對壓縮算法進行設(shè)計,實時數(shù)據(jù)庫數(shù)據(jù)主要可劃分為:(1)表示采集數(shù)據(jù)時間的時間戳,通過將時間戳添加到各次采集的數(shù)據(jù)上可使決策的準確率得以有效提升,通常以具體應(yīng)用場景為依據(jù)對自定義系統(tǒng)采集的時間戳。時間戳跳變對整體性影響較小,時間戳在固定的數(shù)據(jù)采集周期下通常呈現(xiàn)出等差數(shù)列形式,不連續(xù)的跳變的時間戳表現(xiàn)形式通常代表數(shù)據(jù)傳輸失敗,大部分數(shù)據(jù)均可成功傳輸。(2)用于判斷數(shù)據(jù)采集信息工作狀態(tài)的質(zhì)量碼,為滿足物聯(lián)網(wǎng)發(fā)展需求,數(shù)據(jù)質(zhì)量碼在此基礎(chǔ)上包含了多種信號狀態(tài),在實時數(shù)據(jù)庫中,數(shù)據(jù)質(zhì)量碼以少數(shù)的固定值為主,不同狀態(tài)對應(yīng)使用不同的數(shù)值表示,例如在系統(tǒng)數(shù)據(jù)處于正常狀態(tài)的情況下,質(zhì)量碼的存儲特征通常用0表示,并在發(fā)生變化后通常會持續(xù)一段時間。(3)作為實時數(shù)據(jù)庫的主要構(gòu)成部分數(shù)值包含bool型、離散型、連續(xù)型等在內(nèi)的多種類型,其中bool型數(shù)值包括0和 1兩種,根據(jù)不同數(shù)據(jù)精度,連續(xù)型數(shù)值的表示方式需使用到不同長度的數(shù)值對數(shù)據(jù)精度的要求越高表示其具體數(shù)值的位數(shù)越長[1]。
本文針對時間戳和質(zhì)量碼,在壓縮處理實時數(shù)據(jù)庫數(shù)據(jù)的過程中,為提升數(shù)據(jù)傳輸及查詢效率,首先對數(shù)據(jù)進行預(yù)處理,將數(shù)據(jù)按上文所述分為時間戳、質(zhì)量碼和數(shù)值,其中的時間戳和質(zhì)量碼采用RLE 算法;數(shù)值需做進一步的數(shù)據(jù)分析處理,數(shù)值型數(shù)據(jù)中選用采用LZW算法作為bool型數(shù)據(jù)的壓縮算法,綜合運用LZW及LZ78算法作為連續(xù)型及離散型數(shù)據(jù)的壓縮算法,實現(xiàn)了不同類型數(shù)據(jù)的壓縮過程。
(1)時間戳和質(zhì)量碼的壓縮
先確定代表某個時間戳的基準值,并將其存入數(shù)據(jù)庫中,再通過處理其他記錄的時間戳獲取一個差值的序列,然后比較序列力相鄰的兩個時間戳差值的大小,記錄差值相等的次數(shù),然后讀入下一個數(shù)據(jù),對差值不相等情況下的差值及差值相等次數(shù)進行記錄后在開始對下一個差值進行讀入操作,考慮到時間戳的慣用格式,其兩個相鄰差值的級別通常較小,存儲時間戳的差值時可使用 1 個字節(jié)。在存儲差值時,通過單字節(jié)匹配的方式執(zhí)行RLE 算法完成。
(2)數(shù)值的壓縮
本文使用簡單的二進制的bit位對bool類數(shù)值的壓縮過程進行表示。壓縮處理連續(xù)型和離散型數(shù)值時,將數(shù)據(jù)切割為相互獨立的單個字節(jié)以滿足LZ系列壓縮算法處理需求時,會導(dǎo)致原有數(shù)據(jù)的完整性被破壞,所以本文算法在數(shù)據(jù)壓縮過程對數(shù)值之間的關(guān)系進行考慮,對于連續(xù)型數(shù)值實際實驗證明了一段時間內(nèi)其數(shù)據(jù)的波動性較小,以所獲取的差值為依據(jù)對差值的壓縮值進行計算,在記錄值同基準值間差值超長預(yù)設(shè)范圍的情況下將該記錄值選做新基準值,據(jù)此完成對后來記錄的差值的計算。先完成相關(guān)值的初始化選擇和設(shè)置,包括基準值和一個固定值的差值范圍,接下來對字典進行初始化,根據(jù)經(jīng)過預(yù)處理的數(shù)據(jù)類型,完成對當前記錄值同基準值間差值的計算,并據(jù)此判斷字典中是否含有當前差值;否則找出該字符串對應(yīng)索引過程,通過LZ78算法的使用完成對不同基準值的壓縮過程,具體流程如圖1所示,從而使連續(xù)型數(shù)據(jù)實現(xiàn)快速有效的壓縮處理過程[2]。
圖1 數(shù)值壓縮算法流程
具體實驗結(jié)果如表1所示。本文通過使用智能溫濕度控制系統(tǒng)提供測試環(huán)境及數(shù)據(jù),該系統(tǒng)對棚內(nèi)的溫度和濕度使用傳感器完成采集后向控制中心傳送所采集到的數(shù)據(jù),再通過系統(tǒng)的智能控制算法完成對棚內(nèi)環(huán)境的智能控制過程,環(huán)境傳感器采集周期為20 ms,系統(tǒng)采集參數(shù)屬性包含4個等級,陽光強度(15級)為離散值,溫度值為一個連續(xù)數(shù)值即(-3℃~42℃)間,濕度值(2000)為一個連續(xù)數(shù)值,當前調(diào)節(jié)傳感器開關(guān)的數(shù)量為1000,以該環(huán)境中的數(shù)據(jù)(共包括4000 個點)作為實驗對象采用本文算法所獲取的壓縮值如表2所示,實驗結(jié)果表明該算法壓縮時間戳和質(zhì)量碼的效果較好,更適用于離散數(shù)值的壓縮過程。實時數(shù)據(jù)庫壓縮算法同本文壓縮算法的實驗對比結(jié)果如表3所示,本文算法壓縮結(jié)果同原始壓縮比例基本一致,由于原始壓縮算法屬于有損壓縮導(dǎo)致一部分數(shù)據(jù)被丟失,本文算法的無損壓縮過程更能滿足實際工業(yè)應(yīng)用需求。通過實時性較的RLE算法的使用實現(xiàn)了壓縮時間的顯著降低,有損壓縮雖能降低解壓時間但會損失部分數(shù)據(jù),所以可,本文算法兼顧了解壓質(zhì)量和效率,能更好的滿足實時數(shù)據(jù)庫的需求[3]。
表1 算法的壓縮性能對比結(jié)果
表2 4000個點的歷史數(shù)據(jù)
表3 壓縮算法的性能對比
目前使用的實施數(shù)據(jù)庫大多能對歷史數(shù)據(jù)進行長時間的保存,但隨著實際應(yīng)用中數(shù)據(jù)規(guī)模的不斷增加,占用較大存儲空間的直接存儲模式明顯降低了傳輸及后續(xù)查詢效率,為解決數(shù)據(jù)庫中大量數(shù)據(jù)的存儲問題,本文完成了分類的數(shù)據(jù)壓縮算法的設(shè)計,在提高數(shù)據(jù)壓縮的同時實現(xiàn)了實時數(shù)據(jù)庫數(shù)據(jù)的無損存儲,經(jīng)實驗測試本文方法取得了良好的數(shù)據(jù)壓縮及存儲效果,進一步提高了數(shù)據(jù)庫的實時性功能,并使數(shù)據(jù)庫的實際存儲容量得以顯著提升。