TSZ 壓縮算法是 TDengine 提供的一種可選壓縮算法,專門用于浮點(diǎn)數(shù)據(jù)類型。它具有出色的壓縮性能,能夠在有損和無損狀態(tài)下都提供更高的壓縮率,甚至比默認(rèn)壓縮算法高出一倍,滿足更高的數(shù)據(jù)存儲需求。利用數(shù)據(jù)預(yù)測技術(shù),TSZ 壓縮算法更適合處理有規(guī)律變化的數(shù)據(jù),如時(shí)序數(shù)據(jù)。但需要注意的是,由于其高效的壓縮方法,TSZ 壓縮可能需要更多的時(shí)間來執(zhí)行,因此在 CPU 資源充裕且存儲空間有限的情況下使用效果更佳。
最近,我們就有一條關(guān)于“TSZ 壓縮算法”的“新聞”要和大家分享。

不久前,我們收到了這樣一條消息,消息發(fā)送者是來自華中科技大學(xué),武漢光電國家研究中心的碩士研究生鐘宇。在該消息中,他表示在他們近期的一篇名為《ADT-FSE:A New Encoder for SZ》的學(xué)術(shù)論文中,針對 TDengine TSZ 壓縮算法進(jìn)行了相關(guān)改進(jìn)。隨后鐘宇將這部分開源代碼分享在了 TDengine 的 Github 社區(qū)上,成為了 TDengine 開源社區(qū)的又一名貢獻(xiàn)者。
為了讓更多富有開源精神、關(guān)注 TDengine 的小伙伴們了解到這段故事更為詳細(xì)的一面,我們對鐘宇進(jìn)行了一次深入采訪,他將從為何選擇 TDengine 作為研究對象之一、TSZ 壓縮算法的具體優(yōu)化工作以及參與開源的感受等諸多方面展開分享。
采訪實(shí)錄
1、請介紹一下你自己。
感謝邀請,我來自華中科技大學(xué),現(xiàn)在是武漢光電國家研究中心的一名研三碩士。我目前在吳非教授帶領(lǐng)的“磐石新型非易失存儲系統(tǒng)實(shí)驗(yàn)室”(NNSS)課題組。我個(gè)人的研究方向主要包括 NVMe 固態(tài)盤、壓縮算法等。22 年 7~9 月份,我在深圳大普微實(shí)習(xí)期間,與公司的呂濤博士合作完成了優(yōu)化浮點(diǎn)壓縮器 SZ 的論文《ADT-FSE: A New Encoder for SZ》,這篇論文已被收錄在今年的 SC 會議中,SC 是 CCF 認(rèn)證的超算和存儲領(lǐng)域的頂會。文章中 TDengine 作為時(shí)序數(shù)據(jù)庫(Time Series Database)領(lǐng)域的代表,成為 SZ 算法應(yīng)用的一個(gè)重要場景。
2、什么契機(jī)讓你接觸到 TDengine,成為 TDengine 的貢獻(xiàn)者?
首次接觸到 TDengine 是在 SZ 研究開始時(shí),當(dāng)時(shí)聽聞另一位學(xué)長準(zhǔn)備在畢業(yè)設(shè)計(jì)做有關(guān) TDengine 的研究,在討論時(shí)了解到 TDengine 中引入了 SZ(即 TSZ)模塊,并且集成在開源代碼中。時(shí)序數(shù)據(jù)庫作為一個(gè)有前景的、快速發(fā)展的領(lǐng)域,一直是我們團(tuán)隊(duì)想要開拓的方向,而 TDengine 在開源社區(qū)中的影響不小,并且一個(gè)開源且成熟的項(xiàng)目對于我們搞學(xué)術(shù)研究來說非常友好,因此我們也認(rèn)為這是一個(gè)非常良好的契機(jī)。
3、為什么決定進(jìn)行 TSZ 壓縮算法的優(yōu)化工作,優(yōu)化結(jié)果如何?詳細(xì)描述下原因
因?yàn)?SZ 作為一個(gè)業(yè)界領(lǐng)先的有損浮點(diǎn)壓縮器,其實(shí)一直有一個(gè)缺點(diǎn),這一點(diǎn)在 SZ 的開源代碼庫的 README 中也有說明——“SZ 不適合壓縮非常小的文件”,而在數(shù)據(jù)庫中,數(shù)據(jù)通常被切分為小塊進(jìn)行存儲,例如 TDengine 中默認(rèn) 4096 行數(shù)據(jù)為最小存儲單元,如果使用單精度浮點(diǎn)類型(float)存儲,則存儲單元為 16KB。這個(gè)大小對于 SZ 動輒壓縮數(shù)百 MB 甚至數(shù) GB 的數(shù)據(jù)來說,已經(jīng)非常小了,而我們在測試中也發(fā)現(xiàn) SZ 在壓縮該大小的文件時(shí),出現(xiàn)了壓縮比大幅下降、壓縮解壓緩慢等問題。
我們在大量的測試和量化分析后發(fā)現(xiàn),SZ 壓縮中使用的傳統(tǒng) Huffman 算法成為了導(dǎo)致該問題的主要瓶頸,傳統(tǒng) Huffman 算法在壓縮結(jié)果中存儲一顆 Huffman 樹,以便解碼時(shí)能還原出原數(shù)據(jù)。通常在壓縮大文件時(shí) Huffman 樹的大小可以忽略不計(jì),但我們的測試表明這顆樹所占用的空間在小文件下顯得不可忽略,這是問題的關(guān)鍵。
最終我們提出了 ADT-FSE 算法來替換傳統(tǒng) Huffman 算法,這是一種轉(zhuǎn)碼+壓縮的方式,對原數(shù)據(jù)進(jìn)行了一步轉(zhuǎn)碼,而后使用更先進(jìn)的熵編碼 FSE 算法來進(jìn)行壓縮,完全摒棄了 Huffman 樹的消耗,不僅可以提升小文件壓縮下的壓縮比,還能提升壓縮解壓速度。在我們的測試中,ADT-FSE 使得 SZ 的解壓速度快了 2x~8x,在 TDengine 中的壓縮比提升了最高 5x。

4、在整個(gè)優(yōu)化過程中有沒有遇到一些棘手的問題?如何破解的?
起初對于采用何種算法替代傳統(tǒng) Huffman 算法是難以確定的,我們嘗試了直接使用通用壓縮器 Zstd,或者熵編碼 FSE 替代,但其效果都不是最佳,在一些情況下會比原始算法更差。最后我們是在另一個(gè)項(xiàng)目的開發(fā)中,發(fā)現(xiàn) Zstd 內(nèi)部有一種壓縮大范圍整數(shù)的思路,即先轉(zhuǎn)碼后壓縮。受其啟發(fā),我們通過對 SZ 的數(shù)據(jù)進(jìn)行分析,并對該思路進(jìn)行學(xué)習(xí)、改進(jìn),最終才提出了最優(yōu)的 ADT-FSE 算法。
在 TDengine 場景下的評估中,使用何種數(shù)據(jù)進(jìn)行測試也是一個(gè)難題,因?yàn)槲覀儾]有接觸過真實(shí)場景的時(shí)序數(shù)據(jù),另外 SZ 更適合壓縮連續(xù)性較強(qiáng)的數(shù)據(jù)。最終我們選擇了同樣開源發(fā)表的 UK-DALE 數(shù)據(jù)集,其記錄了真實(shí)家庭用電的電壓數(shù)據(jù)。
5、你是什么時(shí)候開始關(guān)注開源參與開源項(xiàng)目的?你認(rèn)為開源帶給了你哪些幫助?
從本科期間開始,開源項(xiàng)目一直是我以及身邊的同學(xué)們關(guān)注的重點(diǎn)。作為學(xué)生,開源是我們重要的學(xué)習(xí)平臺,包括在 Linux 開源庫中學(xué)習(xí)操作系統(tǒng)底層原理,在 fio、liburing 庫中學(xué)習(xí) I/O 相關(guān)知識,以及在 Zstd 開源庫中學(xué)習(xí)壓縮原理,等等。這些優(yōu)秀的開源代碼讓每個(gè)人能接觸到真實(shí)的場景和算法,同時(shí)也能學(xué)習(xí)良好的編程習(xí)慣。
另一方面,在讀研之后,開源代碼也是開展科研工作必不可少的條件。如若沒有開源,對于較簡單的項(xiàng)目而言,可能花幾周、幾個(gè)月復(fù)現(xiàn),然后才可以開展研究工作。而復(fù)雜的系統(tǒng)則基本沒有條件進(jìn)行研究。因此我們在選擇課題時(shí),通常會優(yōu)先考慮已開源的項(xiàng)目。
6、數(shù)據(jù)庫很少有將集群版也進(jìn)行開源的,你如何看待 TDengine 集群版開源這件事?
TDengine 的開源很成功,我在 GitHub 上看到其有 2 萬多顆星,這在社區(qū)中的影響力非常大。我認(rèn)為開源可以吸引全球范圍內(nèi)開發(fā)者的廣泛參與,集思廣益,對于項(xiàng)目本身的長遠(yuǎn)發(fā)展來說是有益的。TDengine 集群版開源,有助于吸收更多先進(jìn)的、新鮮的血液,同時(shí)也使得用戶對 TDengine 的了解更透明,增加其信任度。
7、作為 TDengine 的貢獻(xiàn)者,你如何看待 TDengine 目前的發(fā)展?對 TDengine 還有哪些建議?
在開發(fā)過程中,我與開源社區(qū)的管理人員取得了聯(lián)系,并獲得了他們的很多幫助,合作過程非常愉快且充實(shí)。我感受到 TDengine 社區(qū)是非常健康且活躍的,濤思對于其開源社區(qū)的發(fā)展非常重視,我個(gè)人認(rèn)為開源的 TDengine 是很有前景的。建議的話,如果有適合開發(fā)者的開發(fā)文檔,比如說介紹模塊所在文件,開發(fā)/調(diào)試的高效指令,對于新的開發(fā)者來說效率會更高一些吧。
8、你覺得 TDengine 在時(shí)序數(shù)據(jù)庫領(lǐng)域里的優(yōu)勢是什么?
優(yōu)勢的話除了開源這一點(diǎn)外,在開發(fā)過程中感受到的一點(diǎn)是 TDengine 的生態(tài)比較豐富,與很多其他的開源項(xiàng)目和工具集成,能夠給用戶提供廣泛的選擇和靈活性。
9、對于自身的發(fā)展,未來是如何考慮的?
現(xiàn)在準(zhǔn)備碩士畢業(yè)后直接工作吧,因?yàn)閷ξ襾碚f讀博的時(shí)間成本比較大哈哈哈。畢業(yè)后可能繼續(xù)在存儲領(lǐng)域工作,此前在大普微和阿里云分別實(shí)習(xí)了一段時(shí)間,期間做的方向都相對比較底層,涉及到存儲介質(zhì)和軟件層的交互,之后可能也會往存儲基座的方向發(fā)展吧?,F(xiàn)在正是在應(yīng)屆生秋招的時(shí)候,今年秋招也比較激烈,大家一起加油吧。
寫在最后
近些年來,隨著 TDengine 的產(chǎn)品功能不斷精進(jìn)、開源影響力逐漸擴(kuò)大,越來越多的高校研究生和學(xué)者選擇將 TDengine 作為研究課題輸出論文,其中有像鐘宇這樣致力于功能改進(jìn)的,也有很多著重于分析 TDengine 在工業(yè)物聯(lián)網(wǎng)、智慧園區(qū)、自動駕駛、煙草工業(yè)等諸多行業(yè)的大數(shù)據(jù)場景下的應(yīng)用及性能表現(xiàn)。此前為了幫助社區(qū)開發(fā)者更直接地進(jìn)行參考和查閱,我們還針對此類論文進(jìn)行過一次匯總——《關(guān)于 TDengine 的論文資料都在這里了,等你來??!》。
除了這些外部資料之外,TDengine 也在幫助企業(yè)用戶改造數(shù)據(jù)架構(gòu)過程中,積累了很多實(shí)戰(zhàn)經(jīng)驗(yàn),這些經(jīng)驗(yàn)大多由企業(yè)開發(fā)者執(zhí)筆創(chuàng)作生成了用戶案例,集中發(fā)表在 TDengine 的官網(wǎng)博客(http://www.fjzmyy.cn/tdengine-user-cases)上,大家也可作參考。
如果你針對本次采訪還有更深入的問題想要了解,或者想就數(shù)據(jù)問題咨詢 TDengine 解決方案架構(gòu)師,可以添加小T vx:tdengine,詳細(xì)說明你的訴求,我們會給與你及時(shí)的幫助。



互聯(lián)網(wǎng).png)



-1.png)







證.png)


伙伴.png)
伙伴.png)
伙伴.png)



