TSDB時序數據庫時序數據壓縮解壓技術淺析


簡介: 目前,物聯網、工業互聯網、車聯網等智能互聯技術在各個行業場景下快速普及應用,導致聯網傳感器、智能設備數量急劇增加,隨之而來的海量時序監控數據存儲、處理問題,也為時序數據庫高效壓縮、存儲數據能力提出了更高的要求。對於通量愈加龐大的物聯網時序大數據存儲,盡管標准壓縮方法還能發揮其價值,但某些場景對時序數據壓縮解壓技術效率、性能提出了新的需求。本文介紹了現有的時序數據壓縮解壓技術,分類介紹了不同算法的特點和優劣勢。

image.png

作者 | 仁威

來源 | 阿里技術公眾號

摘要:目前,物聯網、工業互聯網、車聯網等智能互聯技術在各個行業場景下快速普及應用,導致聯網傳感器、智能設備數量急劇增加,隨之而來的海量時序監控數據存儲、處理問題,也為時序數據庫高效壓縮、存儲數據能力提出了更高的要求。對於通量愈加龐大的物聯網時序大數據存儲,盡管標准壓縮方法還能發揮其價值,但某些場景對時序數據壓縮解壓技術效率、性能提出了新的需求。本文介紹了現有的時序數據壓縮解壓技術,分類介紹了不同算法的特點和優劣勢。

時序數據普遍存在於IoT物聯網、工業互聯網、車聯網等相關場景,物聯網設備已遍布各種行業場景應用,從可穿戴設備到工業生產設備,都會或將會產生大量數據。比如,新型波音787客機每次飛行傳感器產生的數據量都在500GB左右。在這些場景下,通常具備高並發寫和高通量數據處理特點,選擇時序數據壓縮算法需要全方位考慮數據采集、存儲、分析的需要。特別需要注意的是業務應用對時序數據當前和歷史數據分析的方式,選擇壓縮算法不當將可能導致關鍵信息丟失,從而影響分析結果。對於業務來說,更直接使用時序數據壓縮技術的應用就是時序數據庫,對於時序數據庫壓縮解壓是關鍵數據處理步驟,壓縮算法性能直接影響時序數據庫建設投入的ROI。

一 時序數據壓縮

對於數據壓縮算法,業界存在更普遍的解釋,通常是針對通用場景和業務相關場景,比如視頻、音頻、圖像數據流壓縮。本文重點介紹時序數據庫中常用的面向時序數據設計或可用於時序數據處理的通用壓縮算法。我們選擇分析的算法具備對更普遍場景下持續產生時序數據壓縮處理的能力,並對IoT物聯網場景傳感器數據壓縮的以下特點做了特殊設計:

1、數據冗余(Redundancy):一些特定模式的時序數據經常性重復出現在一個或多個時間序列。

2、函數估算(Approximability):某些傳感器產生的時序數據生成模式可以根據預定義函數估算。

3、趨勢預測(Predictability):某些時序數據未來趨勢可以通過算法預測,例如利用回歸、深度神經網絡等技術。

image.png

圖 時序數據壓縮算法分類

本文重點總結了時序數據庫和物聯網IoT傳感器管理常用壓縮算法,並根據技術方法(dictionary-based, functional approximation, autoencoders, sequential等)和技術屬性(adaptiveness, lossless reconstruction, symmetry, tuneability)對碎片化的壓縮技術進行了分類,詳細參考上圖,並針對主要算法性能進行了對比分析。

二 背景技術介紹

在介紹壓縮算法之前,我們先對時序數據、壓縮和品質指數(quality indices)幾個關鍵的概念進行定義。

1 時序數據(Time Series)

時序數據指數據元組根據時間戳(ti)升序排列的數據集合,可以被划分為:

1、單變量時序(Univariate Time Series,UTS):每次采集的數據元組集合為單個實數變量。

2、多變量時序(Multivariate Time Series ,MTS):每次采集的數據元組集合由多個實數序列組成,每個組成部分對映時序一個特征。

比如,圖2中股票價格在指定時間窗口的波動可以被定義為單變量時序數據,而每天交易信息(如:開盤、收盤價格,交易量等)則可以定義為多變量時序數據。

image.png

圖 股票交易UTS時序數據樣例

用數學范式表達時序可以被定義為:

image.png

2 數據壓縮

數據壓縮(又被稱為源編碼,source coding),根據David Salmon在《Data Compression: The Complete Reference》一書中的定義,可以簡單描述為“將輸入原始數據流轉變為字符流(bit stream)或壓縮流的體量更小的輸出數據流的過程”。這個過程遵循J. G.Wolff提出的Simplicity Power(SP)理論,旨在盡量保持數據信息的前提下去除數據冗余。

數據解壓縮(又被稱為源解碼,source decoding),執行與壓縮相反過程重構數據流以適應更高效數據應用層對數據表述、理解的需要。

現有壓縮算法根據實現原理的差異,可以被划分為以下幾類:

  • 非適應/自適應(Non-adaptive/ adaptive):非適應算法不需要針對特殊數據流進行訓練以提升效率,而適應算法則需要有訓練過程。
  • 松散/非松散(Lossy/Lossless):松散算法不保障對原始數據壓縮后的結果唯一,而非松散算法對同樣原始數據的壓縮結果唯一。
  • 對稱/非對稱(Symmetric/Asymmetric):對稱算法對數據的壓縮、解壓縮使用相同的算法實現,通過執行不同的代碼路徑切換壓縮解壓縮過程;非對稱算法則在數據壓縮、解壓縮過程分別使用不同的算法。

對於具體的時序數據流壓縮解壓縮過程,一個壓縮算法實例(encoder)輸入s體量的時序數據流TS,返回壓縮后的體量s′的時序數據流TS′,且s>s′包含一同壓縮的時間戳字段E(TS) = TS′。解壓縮算法實例(decoder)的執行過程則是從壓縮數據流還源原始的時序數據流D(TS′) = TS,若TS = TSs則壓縮算法是非松散的,否則就是松散的。

3 品質指數(quality indices)

為了度量時序數據壓縮算法的性能,通常需要考慮三點特性:壓縮率、壓縮速度、精確度。

1、壓縮率:衡量壓縮算法對原始時序數據壓縮比率,可以定義為:

ρ=s's

其中,s′代表時序數據壓縮后的體量,s為時序數據壓縮前的原始體量。ρ的轉置又被稱為壓縮因數,而品質指數(quality indices)則是被用來表述壓縮收益的指標,其定義為:

cg=100loge1ρ

2、速度:度量壓縮算法執行速度,通常用每字節壓縮周期的平均執行時間(Cycles Per Byte,CPB)。

3、精確度:又被稱為失真度量(Distortion Criteria,DC),衡量被壓縮算法重構后的時序數據保留信息可信度。為適應不同場景度量需要,可以用多種度量指標來確定,常用的指標有:

Mean Squared Error:

image.png

Root Mean Squared Error:

image.png

Signal to Noise Ratio:

image.png

Peak Signal to Noise Ratio:

image.png

三 壓縮算法

目前常用的時序數據壓縮算法主要有以下幾種:

1) Dictionary-Based (DB)

1.1. TRISTAN
1.2. CONRAD
1.3. A-LZSS
1.4. D-LZW

2) Functional Approximation (FA)

2.1. Piecewise Polynomial Approximation (PPA)
2.2. Chebyshev Polynomial Transform (CPT)
2.3. Discrete Wavelet Transform (DWT)

3) Autoencoders:

3.1. Recurrent Neural Network Autoencoder (RNNA)

4) Sequential Algorithms (SA)

4.1. Delta encoding, Run-length and Huffman (DRH)
4.2. Sprintz
4.3. Run-Length Binary Encoding (RLBE)
4.4. RAKE

5) Others:

5.1. Major Extrema Extractor (MEE)
5.2. Segment Merging (SM)
5.3. Continuous Hidden Markov Chain (CHMC)

1 Dictionary-Based (DB)

DB算法實現理念是通過識別時序數據都存在的相同片段,並將片段定義為原子片段並以更精簡的標識標記替代,形成字典供使用時以標識作為Key恢復,這種方式能夠在保證較高數據壓縮比的同時,降低錯誤率。此技術實現的壓縮可能是無損的,具體取決於實現情況。此架構的主要挑戰是:

  • 最大限度地提高搜索速度,以便在字典中查找時間系列片段;
  • 使存儲在 dictionary 中的時間串段盡可能一般,以最大限度地縮短壓縮階段的距離。

TRISTAN是基於DB策略實現的一種算法,TRISTAN算法把壓縮划分為兩個階段處理,第一階段適應性學習,第二階段數據壓縮。在學習階段,TRISTAN字典表通過學習訓練數據集來生成,或者結合專家經驗定義特定模式的原子片段。有了字典表,在壓縮階段TRISTAN算法執行從以下公式中檢索w的過程。

s=w·D w ∈ {0,1}k

其中,D是字典表,s為原子片段,K是壓縮后的時序表征數據長度。TRISTAN解壓過程則是通字典表D解釋表征數據w得到原始時序數據的過程。

CORAD算法在TRISTAN基礎之上增加了自動數據關聯信息,對兩兩時序數據片斷進行基於Pearson相關系數的度量,以相鄰矩陣M存儲相關性,通過M與字典表D相結合的計算方式,進一步提升壓縮比和數據解壓精確度。

Accelerometer LZSS(A-LZSS)算法是基於LZSS搜索匹配算法的DB策略實現,A-LZSS算法使用Huffman編碼,以離線方式通過統計數據概率分布生成。

Differential LZW (D-LZW)算法核心思想是創建一個非常大的字典表,它會隨着時間的推移而增長。一旦字典表被創建,如果在字典表中發現緩沖區塊,它就會被相應的索引替換,否則,新方塊將插入字典作為新的條目。增加新的緩存區塊是在保證非松散壓縮的原則下實現,並不限制增加的數量,但隨之而來的問題就是字典表有可能無限膨脹,這就導致D-LZW算法只適用於特定場景,比如輸入時序數據流為有限詞組或可枚舉字符集組成。

Zstandard(zstd)是一種基於Huffman編碼Entropy coder實現的快速非松散DB壓縮算法,字典表作為一個可選選項支撐參數控制開啟關閉。算法實現由Facebook開源,支持壓縮速度與壓縮比之間的按需調整,能夠通過犧牲壓縮速度來換取更高壓縮比,反之亦然。相比同類算法,zstd算法性能可參考下表數據。

image.png

表 zstd算法性能對比

2 Function Approximation (FA)

函數近似類時序壓縮算法FA的主要設計思想是假設時間序列可以表示為時間函數。由於難以避免出現無法處理的新值,找出能夠准確描述整個時間序列的函數是不可行的,因此我們可以將時間序列划分成多個片段,對每個段找到一個近似時間函數來描述。

由於找到一個能完整描述時間序列的函數 f:T → X 是不可行的,因此實現上我們需要考慮找出一個函數簇,以及其對映的參數來描述分段時序數據相對可行,但這也使得壓縮算法為松散的實現。

相比之下,FA類算法優點是它不依賴於數據取值范圍,因此不需要有基於樣本數據集的訓練階段,如果采用回歸算法,我們只需要單獨考慮划分好的單個時間片段。

Piecewise Polynomial Approximation (PPA)是FA類算法的常用實現,此技術將時間序列分為固定長度或可變長度的多個段,並嘗試找到接近細分的最佳多項式表述。盡管壓縮是有損的,但可以先於原始數據的最大偏差進行修復,以實現給定的重建精度。PPA算法應用貪婪的方法和三種不同的在線回歸算法來近似恆定的函數、直線和多項式。

Chebyshev Polynomial Transform (CPT)實現原理與PPA算法類似,只是改進了支持使用不同類型多項式的能力。Discrete Wavelet Transform (DWT)使用Wavelet小波轉換對時序數據進行轉換。Wavelet是描述起止值都為0,中間值在此之間波動的函數,

3 Autoencoders

Autoencoder是一種特殊的神經網絡,被訓練生成用來處理時序數據。算法架構由對稱的兩部分組成:編碼器encoder和解碼器decoder。在給定n維時序數據輸入的前提下,Autoencoder的編碼器輸出m(m<n)維的輸出。解碼器decoder則可以將m維輸出還原為n維輸入。Recurrent Neural Network Autoencoder (RNNA)是Autoencoder的一種典型實現,通過RNN來實現對時序數據的壓縮表述。

image.png

圖 Autoencoder算法實現結構

4 序列化算法Sequential Algorithms(SA)

序列化算法SA實現原理是順序融合多種簡單壓縮技術實現對時序數據壓縮,常用技術有:

  • Huffman coding:編碼器創建一個字典,將每個符號關聯到二進制表示,並以相應的表示替換原始數據的每個符號。
  • Delta encoding:此技術對目標文件進行編碼,以處理一個或多個參考文件。在時間系列的特定情況下,每個元素在 t 被編碼為∆(xt,xt=1)。
  • Run-length encoding:在此技術中,每個運行(連續重復相同值的序列)都與對(vt, o)進行子圖,其中vt是時間t值,o是連續發生次數。
  • Fibonacci binary encoding:此編碼技術基於 Fibonacci 序列實現。

Delta encoding, Run-length and Huffman (DRH)算法是一種融合了Delta encoding、Huffman coding、Run-length encoding和Huffman coding四種技術的壓縮算法,算法實現是非松散的且計算復雜度相對較小,適合在邊緣短實現對數據的壓縮解壓,也因此適合應用在物聯網、工業互聯網、車聯網等需要邊緣短采集處理時序數據的場景。

Sprintz就是一種專門針對物聯網場景設計的SA算法,在算法設計中考慮了對物聯網場景中能源消耗、速度等時序指標波動規律因素,為以下需求而特別優化了算法設計:

1)對較小片段數據的快速處理

2)底計算復雜度的壓縮、解壓縮,以適應邊緣端有限的計算資源

3)對實時采集時序數據的快速壓縮、解壓縮

4)非松散壓縮

為了在處理IoT物聯網環境時序數據上取得更好的壓縮效果,Sprintz算法通過預測數據生成趨勢的方式來提升算法對數據的壓縮性能,其主要實現的算法過程包括以下幾部分:

1)預測:基於delta encoding或FIRE算法通過統計歷史時序數據,對新樣本數據生成規律進行預測;

2)Bit packing:打包預測錯誤信息數據和包頭描述用來解壓數據的信息;

3)Run-length encoding:如果壓縮過程中通過預測算法未發現任何錯誤信息,則略過bit packing過程的錯誤信息發送,並在下次發生錯誤時在打包預測錯誤信息的包頭中記錄略過的數據長度;

4)Entropy coding:用Huffman coding對big packing生成的包文件進行編碼。

Run-Length Binary Encoding (RLBE)算法 也是一種為IoT物聯網場景下數據壓縮解壓,適應物聯網邊緣端有限計算、存儲資源環境的常用非松散SA時序數據壓縮算法,RLBE算法融合了delta encoding,run-length encoding和Fibonacci coding三種技術,其執行過程如下圖所示。

image.png

圖 Run-Length Binary Encoding (RLBE)算法執行過程圖示

RAKE算法原理是通過檢測時序數據稀疏性來實現對數據的壓縮。RAKE為非松散壓縮,執行過程包涵預處理和壓縮兩個主要過程。預處理過程中,RAKE算法設計由字典表來轉換原始數據。壓縮過程則對預處理的輸出數據進行稀疏性檢測,壓縮相鄰的相同數據。

5 其他類型算法

Major Extrema Extractor (MEE)算法通過統計指定時間段的時序數據最大、最小值來對數據進行壓縮。Segment Merging (SM)算法則把時序數據抽象為時間戳和值及偏差組成的片段,可用元組(t,y,δ)表述,其中t為開始時間,y是數值常量標識,δ是數據片段偏差。Continuous Hidden Markov Chain (CHMC)算法則利用馬爾可夫鏈概率模型來將時序數據定義為一系列有限狀態節點集合S及鏈接節點的狀態遷移概率邊集合A。

四 總結

時序數據是物聯網、工業互聯網、車聯網等場景下生成數據總量中占比最高的數據類型,有效的壓縮算法不但可以降低數據存儲成本,同時可以在邊緣到中心,中心到雲的數據傳輸過程中節約網帶寬資源,降低數據同步時間。對於作為時序數據核心存儲中樞的時序數據庫,壓縮算法性能更是至關重要。阿里雲多模數據庫Lindorm核心數據庫引擎之一時序引擎Lindorm TSDB內置的自研、高效數據壓縮算法針對物聯網、工業互聯網、車聯網等智能、互聯場景針對性優化,進一步提升了時序數據存儲的ROI,新一代雲原生智能互聯系統提供必要支撐。

原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM