時(shí)序數(shù)據(jù)庫在海量物聯(lián)網(wǎng)和工業(yè)互聯(lián)網(wǎng)場景下面臨著嚴(yán)峻的存儲(chǔ)成本挑戰(zhàn)。TDengine通過創(chuàng)新的多級(jí)壓縮、列式存儲(chǔ)和多級(jí)存儲(chǔ)架構(gòu),將存儲(chǔ)成本降低至傳統(tǒng)通用數(shù)據(jù)庫的1/10以下。本文將深入解析TDengine存儲(chǔ)成本優(yōu)化的核心技術(shù)原理,并提供可落地的配置實(shí)踐。
一、為什么時(shí)序數(shù)據(jù)庫存儲(chǔ)成本如此關(guān)鍵
在工業(yè)物聯(lián)網(wǎng)、車聯(lián)網(wǎng)、智慧能源等典型場景中,成千上萬的傳感器以毫秒級(jí)頻率持續(xù)產(chǎn)生數(shù)據(jù)。以一個(gè)擁有10萬傳感器的工廠為例,每秒產(chǎn)生的數(shù)據(jù)量可達(dá)數(shù)百萬條,每日新增數(shù)據(jù)量輕松突破數(shù)十GB。如果采用傳統(tǒng)關(guān)系型數(shù)據(jù)庫存儲(chǔ),不僅寫入性能無法滿足要求,存儲(chǔ)成本更將成為企業(yè)難以承受的負(fù)擔(dān)。
TDengine作為一款專為時(shí)序數(shù)據(jù)設(shè)計(jì)的數(shù)據(jù)庫,從底層架構(gòu)出發(fā),通過多項(xiàng)技術(shù)創(chuàng)新將存儲(chǔ)成本壓縮至傳統(tǒng)方案的十分之一。其核心優(yōu)化路徑包括:多級(jí)壓縮算法、列式存儲(chǔ)引擎、多級(jí)存儲(chǔ)策略以及數(shù)據(jù)生命周期管理。
二、多級(jí)壓縮技術(shù):從專用編碼到通用算法
TDengine的壓縮體系分為三個(gè)層級(jí),每一層針對不同的數(shù)據(jù)特征進(jìn)行優(yōu)化,層層遞進(jìn)實(shí)現(xiàn)極致壓縮比。
2.1 一級(jí)壓縮:數(shù)據(jù)類型專用編碼
一級(jí)壓縮充分利用時(shí)序數(shù)據(jù)的內(nèi)在規(guī)律,針對不同數(shù)據(jù)類型采用專門的編碼算法。
差值編碼(Delta Encoding)
時(shí)序數(shù)據(jù)的時(shí)間戳具有嚴(yán)格的遞增規(guī)律,相鄰數(shù)據(jù)點(diǎn)的時(shí)間間隔通常固定。差值編碼只存儲(chǔ)相鄰時(shí)間戳的差值,而非完整時(shí)間戳。
原始時(shí)間戳序列(毫秒):
1699123200000, 1699123201000, 1699123202000, 1699123203000
差值編碼后:
1699123200000, 1000, 1000, 1000
64位時(shí)間戳經(jīng)差值編碼后,通??捎?-16位表示,壓縮比可達(dá)4:1至8:1。
ZigZag編碼
有符號(hào)整數(shù)采用ZigZag編碼,將負(fù)數(shù)映射為正數(shù),使小絕對值整數(shù)占用更少的編碼空間。這種編碼方式特別適合傳感器數(shù)據(jù),因?yàn)閭鞲衅髯x數(shù)通常在小范圍內(nèi)波動(dòng)。
原始值 -> ZigZag編碼
0 -> 0
-1 -> 1
1 -> 2
-2 -> 3
2 -> 4
Delta-Delta編碼
對于浮點(diǎn)數(shù)傳感器數(shù)據(jù),TDengine采用delta-delta編碼,存儲(chǔ)相鄰差值的差值。對于變化平緩的溫度、壓力等數(shù)據(jù),64位浮點(diǎn)數(shù)可壓縮至8-16位。
原始浮點(diǎn)序列:25.3, 25.5, 25.8, 26.0, 26.2
一級(jí)差值: 0.2, 0.3, 0.2, 0.2
Delta-Delta: 0.2, 0.1, -0.1, 0
字典壓縮(Dictionary Encoding)
對于重復(fù)率高的字符串字段(如設(shè)備型號(hào)、狀態(tài)標(biāo)識(shí)),TDengine采用字典壓縮。枚舉類字符串的壓縮比可達(dá)10:1以上。
原始字符串列:"running", "stopped", "running", "idle", "running"
字典映射: 0: "running", 1: "stopped", 2: "idle"
編碼后: 0, 1, 0, 2, 0
2.2 二級(jí)壓縮:通用壓縮算法
一級(jí)壓縮后的數(shù)據(jù)進(jìn)入二級(jí)壓縮階段,TDengine支持四種通用壓縮算法,用戶可根據(jù)業(yè)務(wù)場景靈活選擇。
| 算法 | 壓縮比 | 壓縮速度 | 解壓速度 | 適用場景 |
|---|---|---|---|---|
| LZ4 | 中等 | 極快 | 極快 | 實(shí)時(shí)性要求高的場景 |
| ZLIB | 較高 | 中等 | 中等 | 平衡壓縮比與性能 |
| ZSTD | 高 | 快 | 快 | 推薦默認(rèn)選擇 |
| XZ | 極高 | 慢 | 中等 | 歸檔存儲(chǔ)場景 |
-- 創(chuàng)建數(shù)據(jù)庫時(shí)指定壓縮算法
-- 0: 不壓縮 1: LZ4(默認(rèn)) 2: ZLIB 3: ZSTD 4: XZ
CREATE DATABASE factory_db COMPRESS 3;
-- 針對特定表設(shè)置壓縮選項(xiàng)
CREATE TABLE sensor_data (
ts TIMESTAMP,
temperature FLOAT,
humidity FLOAT,
pressure FLOAT
);
2.3 有損壓縮:TSZ算法
對于允許一定精度損失的場景,TDengine提供TSZ(Time Series Compression)有損壓縮算法。TSZ基于預(yù)測模型,利用時(shí)序數(shù)據(jù)的趨勢特征進(jìn)行壓縮:先根據(jù)歷史數(shù)據(jù)預(yù)測下一個(gè)值,再只存儲(chǔ)預(yù)測值與實(shí)際值的殘差,通過最大誤差閾值控制壓縮質(zhì)量。
TSZ算法可實(shí)現(xiàn)20:1至50:1的壓縮比,同時(shí)保持99%以上的數(shù)據(jù)精度,特別適合監(jiān)控指標(biāo)數(shù)據(jù)、大規(guī)模傳感器采集等場景。
-- 啟用TSZ有損壓縮
CREATE DATABASE monitor_db COMPRESS 3;
-- 配合浮點(diǎn)數(shù)精度控制,進(jìn)一步降低存儲(chǔ)開銷
-- 在應(yīng)用層可將FLOAT類型替換為更節(jié)省空間的類型
CREATE TABLE metrics (
ts TIMESTAMP,
cpu_usage FLOAT,
mem_usage FLOAT
);
三、列式存儲(chǔ):同類型數(shù)據(jù)連續(xù)存儲(chǔ)的天然優(yōu)勢
TDengine采用列式存儲(chǔ)架構(gòu),同一列的數(shù)據(jù)在磁盤上連續(xù)存放。由于同類型數(shù)據(jù)的取值范圍相近、變化模式相似,列式存儲(chǔ)為高效壓縮創(chuàng)造了理想條件。
相比傳統(tǒng)行式存儲(chǔ),列式存儲(chǔ)的壓縮率通常可提升3-5倍。其核心優(yōu)勢體現(xiàn)在三個(gè)方面:
- 數(shù)據(jù)同質(zhì)性:同列數(shù)據(jù)類型相同,編碼算法可以統(tǒng)一處理,避免行式存儲(chǔ)中不同類型數(shù)據(jù)混合導(dǎo)致的壓縮效率下降
- 壓縮塊更大:連續(xù)存儲(chǔ)的同類型數(shù)據(jù)可以組成更大的壓縮塊,通用壓縮算法在更大的數(shù)據(jù)塊上能獲得更好的壓縮比
- 查詢效率高:分析型查詢通常只涉及少數(shù)列,列式存儲(chǔ)可以只讀取所需列的數(shù)據(jù),大幅減少I/O開銷
-- TDengine自動(dòng)采用列式存儲(chǔ),無需額外配置
-- 創(chuàng)建超級(jí)表時(shí),數(shù)據(jù)列將按列式存儲(chǔ)
CREATE STABLE meters (
ts TIMESTAMP,
current FLOAT,
voltage INT,
phase FLOAT
) TAGS (
location BINARY(64),
groupId INT
);
四、多級(jí)存儲(chǔ):熱溫冷數(shù)據(jù)分層管理
TDengine支持多級(jí)存儲(chǔ)架構(gòu),根據(jù)數(shù)據(jù)的訪問頻率將數(shù)據(jù)分布在不同性能的存儲(chǔ)介質(zhì)上,在保證查詢性能的同時(shí)最大化降低存儲(chǔ)成本。
4.1 三級(jí)存儲(chǔ)策略
| 存儲(chǔ)層級(jí) | 存儲(chǔ)介質(zhì) | 數(shù)據(jù)特征 | 成本 |
|---|---|---|---|
| 熱數(shù)據(jù) | 內(nèi)存/SSD | 最近寫入、頻繁查詢 | 高 |
| 溫?cái)?shù)據(jù) | SSD | 近期數(shù)據(jù)、偶有查詢 | 中 |
| 冷數(shù)據(jù) | HDD/對象存儲(chǔ) | 歷史歸檔、極少查詢 | 低 |
4.2 配置多級(jí)存儲(chǔ)
-- 創(chuàng)建數(shù)據(jù)庫并配置存儲(chǔ)策略
CREATE DATABASE energy_db
BUFFER 256 -- 內(nèi)存緩沖區(qū)大?。∕B)
KEEP 3650 -- 數(shù)據(jù)保留天數(shù)(10年)
DAYS 30 -- 每個(gè)數(shù)據(jù)文件存儲(chǔ)的天數(shù)
CACHELAST 0; -- 是否緩存最新數(shù)據(jù)
-- 修改已有數(shù)據(jù)庫的保留策略
ALTER DATABASE energy_db KEEP 1825;
通過合理的多級(jí)存儲(chǔ)配置,企業(yè)可以將90%以上的冷數(shù)據(jù)存放在低成本的HDD或?qū)ο蟠鎯?chǔ)上,僅將少量熱數(shù)據(jù)保留在高性能SSD中,整體存儲(chǔ)成本可降低60%-80%。
五、TTL數(shù)據(jù)生命周期管理:自動(dòng)過期刪除
時(shí)序數(shù)據(jù)的價(jià)值隨時(shí)間遞減,越早的數(shù)據(jù)被查詢的概率越低。TDengine提供內(nèi)置的TTL(Time To Live)機(jī)制,自動(dòng)清理過期數(shù)據(jù),避免無意義的存儲(chǔ)膨脹。
-- 創(chuàng)建數(shù)據(jù)庫時(shí)設(shè)置數(shù)據(jù)保留期為365天
CREATE DATABASE iot_db KEEP 365;
-- 動(dòng)態(tài)調(diào)整保留期
ALTER DATABASE iot_db KEEP 180;
-- 查看數(shù)據(jù)庫配置信息
SHOW CREATE DATABASE iot_db;
TTL機(jī)制的優(yōu)勢在于:
- 零運(yùn)維成本:過期數(shù)據(jù)由系統(tǒng)自動(dòng)清理,無需編寫定時(shí)腳本或手動(dòng)干預(yù)
- 即時(shí)釋放空間:數(shù)據(jù)過期后存儲(chǔ)空間立即回收,存儲(chǔ)成本隨數(shù)據(jù)生命周期自然下降
- 靈活的策略配置:不同業(yè)務(wù)可設(shè)置不同的保留期,精細(xì)化管理存儲(chǔ)資源
在實(shí)際部署中,建議根據(jù)業(yè)務(wù)需求分級(jí)設(shè)置保留策略。例如,實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)保留30天,趨勢分析數(shù)據(jù)保留1年,合規(guī)審計(jì)數(shù)據(jù)保留3-5年。
六、存儲(chǔ)成本對比:TDengine與傳統(tǒng)方案
以下以一個(gè)典型工業(yè)物聯(lián)網(wǎng)場景為例,對比TDengine與傳統(tǒng)方案的存儲(chǔ)成本。
場景假設(shè):10萬個(gè)傳感器,每秒采集一次,每個(gè)數(shù)據(jù)點(diǎn)約16字節(jié)(時(shí)間戳8字節(jié) + 浮點(diǎn)值4字節(jié) + 整數(shù)狀態(tài)4字節(jié)),每日數(shù)據(jù)量約138GB。
| 對比項(xiàng) | MySQL/InfluxDB | TDengine |
|---|---|---|
| 日均原始數(shù)據(jù)量 | 138 GB | 138 GB |
| 實(shí)際存儲(chǔ)占用 | ~138 GB | ~12 GB |
| 壓縮比 | 1:1(無專用壓縮) | 約12:1 |
| 年度存儲(chǔ)成本(以云盤計(jì)) | ~50,000元 | ~5,000元 |
| 查詢響應(yīng)時(shí)間(億級(jí)數(shù)據(jù)) | 秒級(jí)~分鐘級(jí) | 毫秒級(jí) |
TDengine的存儲(chǔ)成本不到通用數(shù)據(jù)庫的1/10,這得益于其多級(jí)壓縮、列式存儲(chǔ)和生命周期管理的協(xié)同作用。在實(shí)際生產(chǎn)環(huán)境中,部分用戶報(bào)告的壓縮比甚至達(dá)到20:1以上。
七、總結(jié)
TDengine通過多級(jí)壓縮技術(shù)、列式存儲(chǔ)引擎、多級(jí)存儲(chǔ)策略和TTL生命周期管理四大核心機(jī)制,將時(shí)序數(shù)據(jù)庫的存儲(chǔ)成本降至傳統(tǒng)通用數(shù)據(jù)庫的1/10以下。其中,一級(jí)壓縮利用時(shí)序數(shù)據(jù)的內(nèi)在規(guī)律進(jìn)行專用編碼,二級(jí)壓縮通過LZ4、ZSTD等通用算法進(jìn)一步壓縮體積,TSZ有損壓縮則針對精度容忍場景提供極致的壓縮比。
對于企業(yè)用戶而言,建議根據(jù)業(yè)務(wù)場景選擇合適的壓縮算法:實(shí)時(shí)性優(yōu)先選擇LZ4,存儲(chǔ)成本敏感選擇ZSTD或XZ,允許精度損失的場景可啟用TSZ算法。同時(shí),配合多級(jí)存儲(chǔ)和TTL策略,實(shí)現(xiàn)存儲(chǔ)資源的精細(xì)化管理和成本的最優(yōu)化。
TDengine作為國產(chǎn)開源時(shí)序數(shù)據(jù)庫的代表,其存儲(chǔ)成本優(yōu)化技術(shù)已達(dá)到業(yè)界領(lǐng)先水平,為物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)、智慧能源等海量數(shù)據(jù)場景提供了經(jīng)濟(jì)高效的存儲(chǔ)解決方案。



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



-1.png)




.png)


證.png)


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



