在工業(yè)物聯(lián)網(wǎng)場景中,一臺復(fù)雜設(shè)備往往配備多種傳感器,各傳感器的采集頻次差異巨大。如何優(yōu)雅地管理這些數(shù)據(jù)?TDengine時(shí)序數(shù)據(jù)庫通過虛擬表機(jī)制,給出了創(chuàng)新性的解決方案。
一、傳統(tǒng)建模的困境
1.1 復(fù)雜設(shè)備的建模挑戰(zhàn)
“一個(gè)數(shù)據(jù)采集點(diǎn)一張表”以及”超級表”的設(shè)計(jì)解決了工業(yè)和物聯(lián)網(wǎng)等場景下的大多數(shù)時(shí)序數(shù)據(jù)管理和分析難題。但在真實(shí)的場景中,一個(gè)設(shè)備往往有多種傳感器,數(shù)據(jù)采集頻次還相差很大。
以一臺風(fēng)機(jī)為例:
- 電氣參數(shù):高頻采集,每秒多次
- 環(huán)境參數(shù):中頻采集,每分鐘數(shù)次
- 機(jī)械參數(shù):低頻采集,每小時(shí)數(shù)次
各自的傳感器和采集頻次完全不一樣,因此很難用一張表來描述一臺設(shè)備,往往需要多張表。
1.2 傳統(tǒng)方案的局限
當(dāng)需要綜合多個(gè)傳感器的數(shù)據(jù)進(jìn)行分析計(jì)算時(shí),傳統(tǒng)方案只能通過多級關(guān)聯(lián)查詢的方式來進(jìn)行,這會導(dǎo)致:
- 易用性問題:SQL語句復(fù)雜,開發(fā)難度大
- 性能問題:多表關(guān)聯(lián)開銷大,查詢效率低
如果建模之初直接采用”一個(gè)設(shè)備一張表”的設(shè)計(jì),由于采集頻次的不同,會導(dǎo)致每一個(gè)具體時(shí)間戳下,大量的列是空值,降低存儲和查詢的效率。
二、虛擬表的核心概念
2.1 什么是虛擬表
虛擬表(Virtual Table,簡稱為VTable)是一種不存儲實(shí)際數(shù)據(jù)而可以用于分析計(jì)算的表。數(shù)據(jù)來源為其它真實(shí)存儲數(shù)據(jù)的子表、普通表,通過將各個(gè)原始表的不同列的數(shù)據(jù)按照時(shí)間戳排序、對齊、合并的方式來生成虛擬表。
2.2 虛擬表的分類
同真實(shí)表類似,虛擬表也可以分為:
| 類型 | 說明 |
|---|---|
| 虛擬超級表 | 一個(gè)設(shè)備或一組分析計(jì)算所需數(shù)據(jù)的完整集合 |
| 虛擬子表 | 根據(jù)需要引用相同或不同的列,靈活定義 |
| 虛擬普通表 | 獨(dú)立的虛擬表實(shí)例 |
2.3 虛擬表的特點(diǎn)
- 不存儲數(shù)據(jù):虛擬表不能寫入、刪除數(shù)據(jù)
- 動(dòng)態(tài)生成:數(shù)據(jù)是每次查詢計(jì)算時(shí)動(dòng)態(tài)生成的
- 查詢透明:在查詢使用上和真實(shí)表相同
- 按需組合:只有一個(gè)查詢中引用的列才會被合并進(jìn)虛擬表中
三、虛擬表的核心功能
3.1 列選擇與拼接
用戶可以從多個(gè)原始表中選擇指定的列,按需組合到一張?zhí)摂M表中,形成統(tǒng)一的數(shù)據(jù)視圖。這使得:
- 不同采集頻次的數(shù)據(jù)可以統(tǒng)一呈現(xiàn)
- 分析計(jì)算時(shí)無需關(guān)心底層表結(jié)構(gòu)
- 業(yè)務(wù)視角與存儲視角解耦
3.2 基于時(shí)間戳對齊
虛擬表以時(shí)間戳為依據(jù)對數(shù)據(jù)進(jìn)行對齊:
- 如果多個(gè)表在相同時(shí)間戳下存在數(shù)據(jù),則對應(yīng)列的值組合成同一行
- 若部分表在該時(shí)間戳下無數(shù)據(jù),則對應(yīng)列填充為NULL
這種機(jī)制完美解決了不同采集頻次數(shù)據(jù)的對齊問題。
3.3 動(dòng)態(tài)更新
虛擬表根據(jù)原始表的數(shù)據(jù)變化自動(dòng)更新,確保數(shù)據(jù)的實(shí)時(shí)性。虛擬表不需實(shí)際存儲,計(jì)算在生成時(shí)動(dòng)態(tài)完成,既節(jié)省存儲空間,又保證數(shù)據(jù)一致性。
四、先寫入后建模
4.1 傳統(tǒng)建模流程
傳統(tǒng)方式要求先設(shè)計(jì)好完整的表結(jié)構(gòu),再進(jìn)行數(shù)據(jù)寫入:
需求分析 → 表結(jié)構(gòu)設(shè)計(jì) → 創(chuàng)建表 → 數(shù)據(jù)寫入 → 數(shù)據(jù)分析
這種方式的問題在于:
- 初期建模負(fù)擔(dān)重
- 需求變化時(shí)修改困難
- 可能遺漏重要的采集量
4.2 虛擬表帶來的變革
虛擬表機(jī)制讓先寫入后建模成為現(xiàn)實(shí):
數(shù)據(jù)寫入(按設(shè)備協(xié)議)→ 數(shù)據(jù)存儲 → 按需建模(虛擬表)→ 數(shù)據(jù)分析
在數(shù)據(jù)采集和寫入階段,無需預(yù)先為復(fù)雜的業(yè)務(wù)分析設(shè)計(jì)表結(jié)構(gòu),可以按照最接近設(shè)備協(xié)議的方式(如單列模型)直接寫入TDengine。待數(shù)據(jù)存儲后,再根據(jù)實(shí)際的分析需求,通過虛擬表動(dòng)態(tài)地創(chuàng)建適合業(yè)務(wù)視角的數(shù)據(jù)模型。
4.3 變革的價(jià)值
- 降低接入復(fù)雜度:無需預(yù)先規(guī)劃所有分析需求
- 減輕初期建模負(fù)擔(dān):邊采集邊發(fā)現(xiàn)需求
- 靈活高效:數(shù)據(jù)處理流程更加靈活高效
五、虛擬表的應(yīng)用場景
5.1 復(fù)雜設(shè)備管理
對于擁有多種傳感器的復(fù)雜設(shè)備,虛擬超級表可以是一個(gè)設(shè)備或一組分析計(jì)算所需數(shù)據(jù)的完整集合。每個(gè)虛擬子表可以根據(jù)需要引用相同或不同的列,最終達(dá)到”千人千面”的效果。
5.2 跨庫跨表分析
無論每個(gè)采集點(diǎn)如何建模(單列或多列),無論這些采集點(diǎn)的數(shù)據(jù)是分布在一個(gè)或多個(gè)庫中,都可以通過定義虛擬表的方式:
- 跨庫跨表任意指定數(shù)據(jù)源
- 通過虛擬超級表進(jìn)行跨數(shù)據(jù)采集點(diǎn)、跨分析的聚合運(yùn)算
5.3 業(yè)務(wù)視角統(tǒng)一
從用戶的角度來看,”一個(gè)設(shè)備一張表”更為直觀、容易操作。虛擬表機(jī)制讓這一愿景徹底成為現(xiàn)實(shí):
- 存儲層:按采集點(diǎn)分散存儲,保證性能
- 業(yè)務(wù)層:按設(shè)備統(tǒng)一呈現(xiàn),提升易用性
六、虛擬表與真實(shí)表的對比
| 特性 | 真實(shí)表 | 虛擬表 |
|---|---|---|
| 數(shù)據(jù)存儲 | 實(shí)際存儲數(shù)據(jù) | 不存儲數(shù)據(jù) |
| 寫入操作 | 支持寫入 | 不支持寫入 |
| 刪除操作 | 支持刪除 | 不支持刪除 |
| 查詢操作 | 支持查詢 | 支持查詢(與真實(shí)表相同) |
| 數(shù)據(jù)來源 | 直接采集 | 來自其他表 |
| 更新機(jī)制 | 手動(dòng)操作 | 動(dòng)態(tài)生成 |
七、最佳實(shí)踐建議
7.1 建模策略
- 存儲層:按照最接近設(shè)備協(xié)議的方式建模,優(yōu)先考慮寫入性能
- 業(yè)務(wù)層:通過虛擬表構(gòu)建業(yè)務(wù)視角的數(shù)據(jù)模型
- 分離關(guān)注點(diǎn):存儲優(yōu)化與業(yè)務(wù)分析解耦
7.2 虛擬表設(shè)計(jì)
- 根據(jù)分析需求定義虛擬表結(jié)構(gòu)
- 合理選擇引用的原始表列
- 利用時(shí)間戳對齊機(jī)制處理頻次差異
7.3 性能優(yōu)化
- 虛擬表查詢時(shí)動(dòng)態(tài)生成,注意查詢復(fù)雜度
- 合理設(shè)計(jì)原始表的索引
- 避免在虛擬表上執(zhí)行過于復(fù)雜的聚合計(jì)算
總結(jié)
TDengine時(shí)序數(shù)據(jù)庫的虛擬表機(jī)制是一項(xiàng)創(chuàng)新性設(shè)計(jì),它巧妙地解決了復(fù)雜設(shè)備數(shù)據(jù)管理的難題。通過”先寫入后建模”的方式,大幅降低了數(shù)據(jù)接入的復(fù)雜度;通過動(dòng)態(tài)生成的虛擬表,實(shí)現(xiàn)了存儲優(yōu)化與業(yè)務(wù)便利的完美平衡。虛擬表機(jī)制讓”一個(gè)設(shè)備一張表”從理想變?yōu)楝F(xiàn)實(shí),為工業(yè)數(shù)據(jù)管理平臺(IDMP)的建設(shè)提供了強(qiáng)有力的技術(shù)支撐。TDengine通過這一機(jī)制,進(jìn)一步鞏固了其在時(shí)序數(shù)據(jù)庫領(lǐng)域的領(lǐng)先地位。



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



-1.png)




.png)


證.png)


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



