實(shí)時(shí)數(shù)據(jù)庫中的二級壓縮技術(shù)
導(dǎo)讀:對實(shí)時(shí)數(shù)據(jù)庫而言,數(shù)據(jù)壓縮可以帶來兩方面的好處:占用硬盤容量減小、系統(tǒng)整體處理速度提高。隨著計(jì)算機(jī)硬件水平的提高,硬件成本在整個系統(tǒng)投入的比重逐步下降,硬盤容量不再是實(shí)時(shí)數(shù)據(jù)庫中最主要的矛盾,但對系統(tǒng)整體處理速度及性能的追求,還是非常重要的。下文中就是實(shí)時(shí)數(shù)據(jù)庫中二級壓縮技術(shù)的講解。
壓縮比例的提高,對實(shí)時(shí)數(shù)據(jù)庫的整體性能的提高有很大的推動作用(但不一定成正比),因此,有必要分析一下,能否對已經(jīng)進(jìn)行有損壓縮處理的數(shù)據(jù)進(jìn)行二級壓縮。
如何進(jìn)行二級壓縮?
從剛才分析的情況,大家很可能就得出結(jié)論,行呀,先通過有損壓縮,將點(diǎn)數(shù)由52個變成6個,再對剩下的6個點(diǎn)進(jìn)行編碼,再進(jìn)行哈佛曼壓縮或別的什么壓縮,不就行了?
哈佛曼壓縮的特點(diǎn)是,將那些經(jīng)常使用的字母用較小長度的字節(jié)表示,這在文本和字符串壓縮中會有比較大的效果,比如英文那個e就是用得很多的,而漢字中的五筆字型也有一級編碼、二級編碼等,也就是說,它們具有可壓縮的余地。
如果大家對隨機(jī)的數(shù)據(jù)點(diǎn),比如剛才6個數(shù)據(jù)點(diǎn),采用哈佛曼或其它無損壓縮試驗(yàn),會發(fā)現(xiàn)壓縮率不會特別地高,也就是說,再次進(jìn)行無損壓縮的意義已經(jīng)不是特別地大。 難度就沒有別的辦法了?辦法還是有的,要完整地表達(dá)測點(diǎn)的一個數(shù)據(jù),需要包括以下四個字段:
測點(diǎn)ID
時(shí)間戳
質(zhì)量戳
值
其中,同一測點(diǎn)的多個數(shù)據(jù)可以保存在一起,因此,測點(diǎn)ID可以不考慮。還剩下三個字段,仔細(xì)分析一下這三個字段的特性,還是有很多文章可做的。
值
先考慮“值”字段,我們采用8字節(jié)的雙精度數(shù)來表示一個模擬量,這里就存在一個由低精度值來表示高精度值的可能。如果一批數(shù)據(jù)中,全部(或大部分)數(shù)據(jù)都可以由4個字節(jié)(或2個字節(jié))來表示精度誤差范圍內(nèi)的8字節(jié)雙精度數(shù),便可以節(jié)省下很多空間了。
當(dāng)然,如果我們能明確地知道某數(shù)據(jù)的精度范圍,便可直接在配置環(huán)境下選擇最合適的數(shù)據(jù)類型,而不必要一定要選擇雙精度數(shù)。
對于值,還有另一種壓縮思路,在流程工業(yè)中,某值的絕對值可能非常大,但如果該值在某時(shí)間段時(shí)的變量范圍在某個精度范圍內(nèi),也可以采用基準(zhǔn)值+變化值的方式保存值,其中基準(zhǔn)值只保存一次,而變化值用低精度值表示。
質(zhì)量戳
質(zhì)量戳是慢變化量,如果不與值共同保存,則可以有很高的壓縮比。但如果不共同保存,則需要考慮查找的索引方式,這是一筆額外的空間開銷。
時(shí)間戳
對于時(shí)間戳,也可以按照值相類似的方式來考慮。
首先,那個毫秒字段,不一定是每個系統(tǒng)每個測點(diǎn)都需要的。再者,兩個時(shí)間之間的相差值,在大部分情況下,不會超過1天的,這個就可以采用簡化表示。還有,現(xiàn)在的系統(tǒng),肯定不需要再處理時(shí)間為2000年以前的時(shí)間了。
以上只是分析,在實(shí)際系統(tǒng)中,還需要考慮這些因素的制約關(guān)系,解壓的難度和時(shí)間度,索引建立的方便性,以及編程的復(fù)雜度。希望上文中涉及到的內(nèi)容對大家能夠有所幫助。
【編輯推薦】