時間序列資料壓縮演算法簡述

CnosDB發表於2023-12-06

引言

時間序列資料是在許多應用程式和領域中生成的一種基本資料型別,例如金融、醫療保健、交通和智慧城市[1]。時間序列分析對於各種任務至關重要,包括異常檢測、預測、分類和聚類等。然而,時間序列資料的龐大數量和複雜性可能對高效儲存、檢索和處理帶來重大挑戰[2]。

相比於傳統的關係型資料庫,時間序列資料庫天生是為了時間序列資料處理而生。關聯式資料庫往往採用傳統的B+樹儲存結構以及行式儲存的方式。這種儲存結構的設計方案往往適合讀多寫少的場景,來提高資料查詢效能,用以減少磁碟或者網路 I/O。

然而,在這種設計上,由於絕大部分設計和資源都是為了讀取資料,在每插入一條新記錄時,都要同步更新相應的儲存結構。資料庫往往還要先找到所要插入的資料位於B+ 樹中的哪個節點,儲存頁面中的哪一個頁,檢視相應的鍵是不是已經存在等等,這都會大量增加插入操作的時間開銷。因此,以目前時間序列資料庫開源社群使用最為廣泛的InfluxDB[3]為例,其採用了基於LSM樹的儲存結構,並對此進行了一些特異性最佳化開發,使得資料庫寫入的能力提高很多倍。

隨著時間的推移,早期產生的資料所具有的價值會越來越低,對於時間序列資料庫的應用場景之一監控場景來說,使用者更可能僅僅關注當前時刻或近期內資料庫的狀態引數,而較早產生的資料會因時間積累越來越多且僅有較低機率會被查詢。因此有必要對早期的資料進行一定程度的壓縮,同時考慮到該型別資料查詢價值較低,在提高壓縮比的同時又能夠儘可能保留原始資料的一些特徵便成為了一個重要的問題。這樣可以更好地對資料庫資源合理規劃、緩解資料庫管理資料的壓力,降本增效,更好的為資料的儲存和查詢賦能。

為了應對這些挑戰,越來越需要專門的演算法和資料結構來壓縮並索引時間序列資料。資料壓縮演算法主要在資料壓縮比、資料解壓縮速度、資料壓縮精度這幾方面做權衡,指導了時間序列資料壓縮的各種技術的發展。

資料壓縮演算法分類

對於時間序列資料,有幾種常用的壓縮演算法。可以根據壓縮再解壓後是否丟失精度問題,將壓縮演算法分為兩類:分別是無失真壓縮演算法和有失真壓縮演算法。 

無失真壓縮演算法的特點是壓縮前後資料的完整性保持不變,即壓縮後的資料可以完全恢復到壓縮前的原始資料。常見的無失真壓縮演算法包括:

  • 基於差分編碼的演算法[7,8]:差分編碼演算法透過計算相鄰時間點之間的差異來壓縮時間序列資料,減少冗餘資訊的儲存。
  • 基於霍夫曼編碼的演算法[9,10]:使用變長編碼,高頻資料用較短的程式碼表示,而低頻資料用較長的程式碼表示。 

有失真壓縮演算法透過去除一些冗餘資訊來達到較高的壓縮率,但壓縮後的資料不能完全恢復到原始資料,可能存在一定程度的誤差。常見的有失真壓縮演算法包括: 

  • 基於小波變換的演算法[11,12]:小波變換可以將時間序列資料分解成多個頻率子帶,提取時間序列資料的主要特徵,然後透過編碼對這些特徵進行壓縮。 
  • 基於離散餘弦變換的演算法:離散餘弦變換可以將時間序列資料轉換為頻域訊號,透過保留高頻分量和抑制低頻分量實現壓縮。

廣泛應用的壓縮演算法簡介

  • Gorilla[13]是一種基於二進位制元組編碼的時間序列資料壓縮演算法。它的優點包括高壓縮率、高壓縮速度和較低的儲存要求,但由於需要大緩衝區,可能會受到記憶體限制的影響。 
  • LZ4[14]是一種通用資料壓縮演算法,也可用於時間序列資料壓縮。其優點包括壓縮速度快、壓縮延遲低、壓縮比好,但在一些特殊的時間序列資料分佈中,可能會出現壓縮效能不佳的情況。
  • Zstandard[15]是一種基於LZ77演算法的壓縮演算法,適用於一般的壓縮解壓任務, 也可以用於時間序列資料的壓縮。其優點是壓縮比高,解壓延遲低,壓縮速度可調,但壓縮時間可能較長。 
  • Snappy[16]是一種快速壓縮演算法,適用於各種型別的資料,包括時間序列資料。其優點包括壓縮速度高、壓縮延遲低、壓縮比可靠,但壓縮比相對較低。 
  • LFZip[17]是一種基於分段和擬合演算法的時間序列資料壓縮演算法,具有良好的壓縮比和速度。它的缺點是不能處理異常值和噪聲,需要調整一些引數以適應 同的資料分佈。 
  • Chimp[18]是一種基於取樣的時間序列資料壓縮演算法,具有高壓縮比和速度,可以動態適應不同的資料分佈。它的缺點是需要足夠的取樣頻率來保證壓縮精度,並且處理異常值的能力較弱。 
  • Sprintz[19]是一種簡單有效的無損資料壓縮演算法。其主要優點包括壓縮比高、速度快、複雜度低。但是Sprintz演算法對資料相關性的依賴度很高,需要額外的一些位來儲存差異,導致儲存量相對較低。

在 CnosDB 中應用壓縮演算法

在 CnosDB 中,可以在建立資料庫時對特定的屬性指定壓縮方法,CnosDB 中支援的壓縮方法包括:

  • Delta 
  • Gzip 
  • Bzip 
  • Gorilla 
  • Snappy
  • Zstd 
  • Zlib
  • BitPack
  • SDT
  • DeadBand

語法結構如下:

CREATE TABLE TIMESERIES(
    column1 BIGINT CODEC(DELTA),
    name STRING CODEC(GZIP),
    age BIGINT UNSIGNED CODEC(NULL),
    marriage BOOLEAN,
    ID DOUBLE CODEC(GORILLA)
)

在建立資料庫時,指定屬性的型別後,附加一個CODEC(),括號內是壓縮方法,來達到指定壓縮方式的效果。

小結

時間序列的壓縮主要還是圍繞著時間序列的連續性好、相關性強的特點設計壓縮演算法,而由於資料規模通常較大,以一定精度損失換取極高壓縮比的有失真壓縮演算法更廣泛地被應用。

本文簡單介紹了時間序列壓縮任務的來源,壓縮演算法的分類,並對常見壓縮演算法的優缺點進行了簡介,在CnosDB中的應用也只是略有提及,感興趣者可以檢視參考文獻中的內容。

參考文獻

[1] FU T-C. A review on time series data mining [J]. Engineering Applications of Artificial Intelligence,2011,24(1):164-181. 

[2] WLODARCZYK T W. Overview of time series storage and processing in a cloud environment [C] // 4th IEEE International Conference on Cloud Computing Technology and Science Proceedings,[S.l.],2012:625-628.

[3] NAQVI S N Z,YFANTIDOU S,ZIMÁNYI E. Time series databases and influxdb[J]. Studienarbeit, Université Libre de Bruxelles,2017,12

[4] ANH V N,MOFFAT A. Index compression using 64-bit words[J]. Software: Practice and Experience,2010,40(2):131-147. 

[5] GOLOMB S. Run-length encodings (corresp.) [J]. IEEE transactions on information theory,1966,12(3):399-401. 

[6] RICE R F. Some practical universal noiseless coding techniques[M] // . 1979. 

[7] CANDY J. A use of double integration in sigma delta modulation [J]. IEEE transactions on communications,1985,33(3):249-258. 

[8] O’NEAL J. Differential pulse-code modulation (PCM) with entropy coding[J]. IEEE Transactions on Information Theory,1976,22(2):169-174. 

[9] OSWAL S,SINGH A,KUMARI K. Deflate compression algorithm [J]. International Journal of Engineering Research and General Science,2016,4(1) :430-436. 

[10] GAILLY J-L,ADLER M. GNU gzip [J]. GNU Operating System,1992. 

[11] ZHANG Q,BENVENISTE A. Wavelet networks[J]. IEEE transactions on Neural Networks,1992,3(6):889-898. 

[12] KINGSBURY N. Complex wavelets for shift invariant analysis and filtering of signals[J]. Applied and computational harmonic analysis,2001,10(3): 234-253. 

[13] PELKONEN T,FRANKLIN S,TELLER J,et al. Gorilla: A fast, scalable, inmemory time series database [J]. Proceedings of the VLDB Endowment,2015, 8(12):1816-1827. 

[14] COLLET Y,OTHERS. Lz4: Extremely fast compression algorithm[J]. code. google. com,2013. 

[15]COLLET Y. Zstandard-fast real-time compression algorithm[J]. Github repository [online],2018. 

[16] GUNDERSON S H. Snappy: A fast compressor/decompressor[J]. code. google. com/p/snappy,2015. 

[17] CHANDAK S,TATWAWADI K,WEN C,et al. LFZip: Lossy compression of multivariate floating-point time series data via improved prediction [C] // 2020 Data Compression Conference (DCC),[S.l.],2020:342-351. 

[18] LIAKOS P,PAPAKONSTANTINOPOULOU K,KOTIDIS Y. Chimp: efficient lossless floating point compression for time series databases [J]. Proceedings of the VLDB Endowment,2022,15(11):3058-3070. 

[19] BLALOCK D,MADDEN S,GUTTAG J. Sprintz: Time series compression for the internet of things [J]. Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies,2018,2(3):1-23


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026635/viewspace-2999018/,如需轉載,請註明出處,否則將追究法律責任。

相關文章