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