儲存空間緊張?來看 TDengine TSZ 壓縮演算法如何顯著提升壓縮率
TSZ 壓縮演算法是 TDengine 為浮點資料型別提供的可選壓縮演算法,可以實現浮點數有損至無損全狀態壓縮,相比預設壓縮演算法,TSZ 壓縮演算法壓縮率更高,即使切至無損狀態,壓縮率也會比預設壓縮高一倍。一般來說,TSZ 壓縮演算法是透過資料預測技術完成的壓縮,所以更適合有規律變化的資料。同時 TSZ 壓縮時間會更長一些,在我們的伺服器 CPU 空閒、儲存空間緊張的情況下適合選用。
在此前釋出的《壓縮比提高5倍!貢獻者+1》一文中,華中科技大學、武漢光電國家研究中心的碩士研究生鍾宇為大家詳細介紹了其在近期發表的學術論文中,針對 TDengine TSZ 壓縮演算法進行的相關改進。本篇文章中,我們將就如何在 TDengine 中開啟 TSZ 壓縮演算法進行詳細說明,並會針對 TSZ 壓縮演算法展開功能測試,為大家驗證其在實際業務場景中的更優效能。
在 TDengine 中開啟 TSZ 壓縮演算法
TDengine 3.2.0.0 及以上版本中支援此壓縮演算法。在 taos.cfg 配置中增加以下內容,即可開啟 TSZ 壓縮演算法,功能開啟後,會替換預設演算法。以下表示欄位型別是 float 及 double 型別都使用此壓縮演算法,也可以單獨只配置一個。
lossyColumns float|double
配置成功後需要重啟服務才能生效,當 Taosd 日誌輸出以下內容時,即表明功能已生效:
02/22 10:49:27.607990 00002933 UTL lossyColumns float|double
配置引數
FLOAT 型別精度控制:
DOUBLE 型別精度控制:
TSZ 壓縮中可選擇的演算法 FSE,預設為 HUFFMAN:
但需要注意的是,開啟 TSZ 後生成的儲存資料格式,在回退至 3.2.0.0 之前的版本後資料將不能被識別。
TDengine TSZ 壓縮演算法功能測試
資料正確性
首先我們需要驗證寫入資料被 TDengine 儲存後再次讀取出來的正確性:
- 透過 0-others/compress_tsz1.py 實現;
- 寫入 10 個子表, 每子表 10 萬資料,分別寫入 float 和 double 欄位指定的隨機值,寫入完成後全部再讀取出來,和原來寫入時的值進行比較。原來寫入的值把整數及小數部分分別在兩個 int64 的欄位中儲存,驗證時再讀取出來合成一個浮點數進行驗證。驗證的誤差 float 為 1e-6, double 為 1e-12;
- 驗證透過,資料完全正確。
資料相容性
首先我們需要先寫入開啟 TSZ 壓縮的資料,然後再寫入關閉 TSZ 壓縮的資料,此階段測試預期是不管 TSZ 選項開啟或關閉,原來使用 TSZ 寫入的及沒有使用 TSZ 寫入的都能正確讀取出來。
測試步驟如下:
- 配置 TSZ 選項為開啟 lossyColumns float|double
- 啟動 taosd
- 建立資料庫及表,表中包括 float 及 double 欄位
- 寫入 100 萬條資料
- 寫入成功後讀取並檢視資料正確性
- 退出 taosd 並關閉 TSZ 選項
- 啟動 taosd 並寫入新資料到表中
測試結果顯示原來的資料及新寫入資料,都正常為符合預期,反覆開啟及關閉 TSZ,不影響已寫入資料的正常存取。
效能比較
我們對本次新引入的 FSE 演算法、原來的演算法,及關閉 TSZ 壓縮後的三個場景作為三種方案進行對比測試,驗證開啟 TSZ 演算法及使用 TSZ 新的 FSE 演算法的效果。本次測試的資料規模如下:1 個超級表,2 個子表,每子表 100 萬條資料,子表為 25 列 (其中 float 11 列、double 11 列)。
下表為最終測試結果:
從上表可知,方案一中新增的 FSE 演算法開啟後寫入效能優於原來的演算法,符合預期;其次,TSZ 壓縮演算法開啟比關閉時,在寫入效能、查詢及壓縮率方面均有小幅提升,此結論也符合預期。
寫在最後
在閱讀完本篇文章後,你一定對在 TDengine 中開啟 TSZ 壓縮演算法及如何打造更優質效能有了更深入的瞭解,現在你可以進行操作了。如果在實操過程中碰到任何問題或難點,可以新增 小T vx(tdengine),和我們的資/深研發工程師進行面對面溝通。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014783/viewspace-2997578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TDengine Contributor 鍾宇講述 TSZ 壓縮演算法最佳化背後的故事演算法
- Impala之儲存和壓縮
- Linux下各壓縮方式測試(壓縮率和使用時間)Linux
- 8-字串的壓縮儲存字串
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- Redis儲存優化--小物件壓縮Redis優化物件
- 物件儲存服務的壓縮特性物件
- MySQL 可以壓縮或回收磁碟空間嗎MySql
- 監控影片儲存壓縮解決方案
- 檔案壓縮和解壓縮
- Python實現壓縮和解壓縮Python
- linux下壓縮解壓縮命令Linux
- linux壓縮和解壓縮命令整理Linux
- JS壓縮方法及批量壓縮JS
- 壓縮率達10的48次方,實現蛋白序列空間極端壓縮,清華EvoAI登Nature子刊AI
- Hive的壓縮儲存和簡單優化Hive優化
- 5 年前他的一個設計思路,讓 TDengine 時間壓縮提升近 50 倍
- Ceph Reef(18.2.X)之壓縮演算法和壓縮模式演算法模式
- Linux tar分卷壓縮與解壓縮Linux
- 如何把影片壓縮,影片壓縮軟體哪個最好
- png格式如何壓縮,圖片壓縮工具哪個好
- Linux壓縮解壓Linux
- CentOS 壓縮解壓CentOS
- MSZIP 演算法是一種壓縮演算法,用於在 Microsoft Windows Installer (MSI) 檔案中壓縮和儲存檔案。它是一種基於 Lempel-Ziv 演算法(LZ77)的演算法,旨在提供高效的檔案壓縮和解壓縮。演算法ROSWindows
- 壓縮演算法一覽演算法
- 壓縮字串《演算法很美》字串演算法
- linux 高效壓縮工具之xz的壓縮解壓使用Linux
- Linux中檔案的壓縮和解壓縮Linux
- 打包/壓縮
- Gzipped 壓縮
- JS—圖片壓縮上傳(單張)JS
- linuxtar解壓和壓縮Linux
- linux分卷壓縮解壓Linux
- 如何Rust壓縮目錄?Rust
- win10 如何壓縮影片 win10怎麼壓縮影片Win10
- pdf壓縮教程:如何把pdf檔案壓縮得小一點
- 壓縮包格式有哪些?壓縮包格式大全
- ppt怎麼壓縮,ppt壓縮的技巧分享