本篇(pian)文章(zhang)來自“2024,我想和(he) TDengine 談談”征文活(huo)動的優秀(xiu)投(tou)稿,深入探討了如何在(zai)(zai)消防(fang)行(xing)業中運(yun)用(yong) TDengine 進行(xing)業務建模。文章(zhang)重點(dian)介紹了如何通過(guo) TDengine 的超級表、標簽設(she)計和(he)高效查詢功能,有效管理消防(fang)監(jian)控系(xi)統(tong)中的時(shi)序(xu)數(shu)據(ju)(ju)。作者詳細闡述了實時(shi)監(jian)控、報警系(xi)統(tong)以及歷史數(shu)據(ju)(ju)分析在(zai)(zai)消防(fang)行(xing)業中的應用(yong),展示了 TDengine 在(zai)(zai)數(shu)據(ju)(ju)壓縮、保留(liu)策(ce)略和(he)分布式架構(gou)下(xia)的強大優勢。
在 TDengine 中進行(xing)消(xiao)防行(xing)業的(de)(de)業務(wu)建(jian)模,需要根據(ju)(ju)消(xiao)防場景的(de)(de)具體(ti)需求,設計高(gao)效的(de)(de)數(shu)據(ju)(ju)存(cun)儲(chu)、查詢和(he)分析(xi)架構(gou)。消(xiao)防行(xing)業的(de)(de)業務(wu)模型通常涉及大量(liang)(liang)傳感(gan)器、報警設備(bei)等數(shu)據(ju)(ju)源,需處理(li)設備(bei)的(de)(de)實時(shi)數(shu)據(ju)(ju)采集、監控和(he)歷史數(shu)據(ju)(ju)分析(xi)。通過優化數(shu)據(ju)(ju)處理(li)流程,確保系統能高(gao)效地管理(li)和(he)分析(xi)這些海量(liang)(liang)的(de)(de)時(shi)序數(shu)據(ju)(ju)。
TDengine 是一款(kuan)專為時序(xu)數(shu)(shu)據(ju)(ju)設(she)(she)計的(de)數(shu)(shu)據(ju)(ju)庫,廣泛應用于物聯網、工(gong)業監(jian)控(kong)、金(jin)融監(jian)控(kong)等場(chang)景。這些場(chang)景通常涉及大量連續的(de)數(shu)(shu)據(ju)(ju)點(dian)。以消防系(xi)統(tong)為例,系(xi)統(tong)中的(de)各(ge)類監(jian)控(kong)設(she)(she)備(bei)(如電氣(qi)火災監(jian)控(kong)探(tan)測器(qi)、煙霧探(tan)測器(qi)、溫濕度探(tan)測器(qi)、可燃氣(qi)體探(tan)測器(qi)等)定(ding)期上(shang)傳數(shu)(shu)據(ju)(ju),形成典型的(de)時序(xu)數(shu)(shu)據(ju)(ju)。其數(shu)(shu)據(ju)(ju)類型主(zhu)要包括:
1. 實時監控數據:消(xiao)防物聯(lian)網設備持續上傳環境監(jian)控數據(ju),如(ru)電壓、電流、溫(wen)度、濕度、煙霧濃度和(he)氣體濃度等,其中(zhong)時間戳(chuo)是數據(ju)的(de)核心。
2. 事件數據:當設備檢測到異常情(qing)況(如火警、預警、故障、動作或(huo)隱患(huan)等)時(shi),會上傳告警信息,幫助及(ji)時(shi)響應和處置。
3. 地理位置數據:設(she)備(bei)分布在不同(tong)區(qu)域、樓宇、樓層,因此需要記錄設(she)備(bei)的準(zhun)確地理(li)位置信息。
在 TDengine 中,針對(dui)這類數(shu)據,我們可(ke)以使用超級表進行管(guan)理(li)。超級表不(bu)僅能(neng)優化批量寫入,還能(neng)提高(gao)查詢效(xiao)率,確保大規模時序數(shu)據的高(gao)效(xiao)處理(li)。
接下來,我將(jiang)圍繞(rao)設備模(mo)型的(de)(de)超級表設計、標簽(Tags)設計、數據(ju)壓(ya)縮與保留策(ce)略(lve)等方面,詳(xiang)細(xi)解析 TDengine 在消防(fang)物聯網(wang)場(chang)景(jing)中的(de)(de)應用。
設備模型的超級表設計
消(xiao)防系(xi)統中(zhong)設(she)備種類繁多,但同(tong)類型設(she)備的數據結(jie)構高度相似。利用 TDengine 的超級表(Super Table)進行建(jian)模(mo),可以為每類設(she)備創建(jian)一張超級表,讓不同(tong)設(she)備共(gong)享統一的數據結(jie)構,并通過標(biao)簽(Tags)區分每個(ge)設(she)備的個(ge)性化信息。
以電氣火災監(jian)控探測(ce)器場景為例,超級(ji)表(biao)可進行如下設計:
CREATE STABLE electrical_fire_device (
ts timestamp, --時間戳
residual_current float, -- 剩余電流
A_phase_temperature float, --A相溫度
B_phase_temperature float, --B相溫度
C_phase_temperature float, --C相溫度
N_phase_temperature float, --N相溫度
A_phase_current float, --A相電流
B_phase_current float, --B相電流
C_phase_current float, --C相電流
A_phase_voltage float, --A相電壓
B_phase_voltage float, --B相電壓
C_phase_voltage float --C相電壓
) TAGS (
device_address varchar(32),
unit_id varchar(32),
deivce_type_id varchar(32),
device_id varchar(32),
building_id varchar(32),
floor_id varchar(32)
);
設計要點如下:
- ts(時間戳字段): 用于記錄每次數據采集的時間。
- residual_current、A_phase_temperature、A_phase_current、A_phase_voltage 等字段: 存儲電氣火災監控探測器上報的重要實時數據,包括剩余電流、相溫度、相電流、相電壓等。
- 標簽字段: 通過
device_id、building_id、floor_id、location_address和unit_id等標簽,精準標識設備位置,同時支持高效的數據查詢。
- floor_id:設備所在的樓層 ID。
- device_address:設備的具體位置描述。
- device_type_id:設備類型ID
通過(guo)這些標簽,我們可以輕松實現條件查詢(xun)。例如,查詢(xun)特定建(jian)筑或樓層(ceng)的(de)所(suo)有設備數(shu)據,或基于設備 ID 精確(que)定位(wei)單個(ge)設備的(de)數(shu)據。
數據壓縮與保留策略
消防系統中的監控數據通常需要長期保存,以便進行事故調查和分析。因此,在業務模型設計時需重點考慮數據的壓縮與保留策略:
- 壓縮:TDengine 內置高效的時序數據壓縮算法,能夠大幅減少存儲空間,確保海量歷史數據的高效存儲。
- 保留策略:針對長期保留的消防數據,可以根據數據優先級設置合理的保留策略。例如,保留最近一年的詳細數據,并定期清理超過一年的低優先級數據。
- 多級存儲與對象存儲:通過配置參數
dataDir,TDengine 支持集群掛載多塊硬盤,實現數據分級存儲,將不同時間段的數據存儲在不同設備上,實現“熱”數據與“冷”數據分離。例如,最新采集且訪問頻繁的數據可存儲在高性能固態硬盤(SSD)上,以滿足高效讀寫需求,而歷史數據等訪問較少的數據則可存儲在成本更低的機械硬盤(HDD)上。此外,TDengine 還支持將時序數據存儲到對象存儲系統中,并允許對對象存儲中的數據執行刪除和更新操作,進一步降低存儲成本,充分利用各類存儲資源。
設置數據保(bao)留策略示(shi)例如下:
CREATE DATABASE your_database_name KEEP 365;
ALTER DATABASE your_database_name KEEP 180;
實時報警與歷史分析
消防行業的業務需求包括實(shi)時報警(jing)和歷史數據分析:
實時報警:當設(she)備檢測到(dao)火警(jing)、預警(jing)或故(gu)障(zhang)時(shi),需要實時(shi)觸發報(bao)警(jing)系統(tong)。借助 TDengine 的實時(shi)查詢功能,可以對異常數(shu)據進(jin)行(xing)實時(shi)監測,并觸發相應的報(bao)警(jing)機制。
歷史數據分析:通過歷史數(shu)據(ju)分析,可以(yi)實現趨勢預(yu)測、設備故(gu)障排查(cha)和(he)消防事(shi)故(gu)回(hui)溯等(deng)任務。例如,通過分析特定時間段內溫度、煙霧濃度、電(dian)流、電(dian)壓等(deng)變化(hua)趨勢,識別潛在安全隱(yin)患(huan)。
以設備歷史事件表為例,實時查詢示例如下:
CREATE
STABLE monitor_event_his (
ts timestamp, --時間戳
id varchar(32) primary key,
event_type int,-- 事件類型(0:火警,1:故障,2:隱患等等)
message_id varchar(32),-- 消息id
monitor_flag int,-- 監測項標識
monitor_item varchar(50),--監測項名稱
monitor_item_value FLOAT,-- 監測項值
description varchar(50),-- 監測項單位(MPa,m,℃)
event_id varchar(32)-- 事件id
) TAGS (
device_address varchar(32),-- 設備地址
unit_id varchar(32),-- 單位id
deivce_type_id varchar(32),--設備類型
device_id varchar(32),-- 設備id
building_id varchar(32),-- 樓棟id
floor_id varchar(32)-- 樓層id
);
如下是查詢最近一(yi)分(fen)鐘(zhong)內設備上報的隱(yin)患:
SELECT *
FROM monitor_event_his
WHERE event_type = 2
AND ts > NOW - 1m; -- 查詢最近
再例如,可以通過 interval 按指定的(de)時間窗口對原始(shi)數據(ju)進(jin)行聚合(即降采樣),從(cong)而在展示趨勢線時顯著減少前端從(cong)數據(ju)庫(ku)拉(la)取的(de)數據(ju)量,提高展示效率(lv)。
如(ru)下是查詢某設備(bei)最近一周的剩余電流情況,按(an) 10 分(fen)鐘窗口劃分(fen)并計算平均值(zhi):
select avg(residual_current) as avg_residual_current,first(ts) as ts
from electrical_fire_device
where device_id='20240806094407799068' and ts >= now - 7d
interval (10m)
高效批量寫入
消(xiao)防監控設備會生成(cheng)海(hai)量數據(ju),因此(ci)需要(yao)確保數據(ju)寫(xie)入的高效性。TDengine 支持高效批量寫(xie)入,可(ke)以一(yi)次性寫(xie)入多條數據(ju),減少頻繁的單條寫(xie)入請(qing)求,從(cong)而大幅提升寫(xie)入性能。
批量寫入示例:
INSERT INTO electrical_fire_device(tbname, ts, residual_current, A_phase_temperature, B_phase_temperature, C_phase_temperature,
N_phase_temperature, A_phase_current, B_phase_current, C_phase_current, A_phase_voltage,
B_phase_voltage, C_phase_voltage, device_address, unit_id, deivce_type_id, device_id)
VALUES ('20240806094407799068', NOW, 3.6, 30.6, 30.9, 30.7, 30.7, 0.3, 1.5, 2, 235.5, 236.5, 235.7, '強電井內',
'340000DW1809068949740978176', '23050000', '20240806094407799068'),
('20240806094407799068', NOW+1s, 3.7, 30.6, 30.9, 30.7, 30.7, 0.3, 1.5, 2, 235.5, 236.5, 235.7, '強電井內',
'340000DW1809068949740978176', '23050000', '20240806094407799068')
('20240806094407799068', NOW+2s, 3.8, 30.6, 30.9, 30.7, 30.7, 0.3, 1.5, 2, 235.5, 236.5, 235.7, '強電井內',
'340000DW1809068949740978176', '23050000', '20240806094407799068');-- 批量插入多條設備數據
分布式架構與高可用性
消防監控系統對(dui)數據的實時性和高可用性要求極(ji)高,因此 TDengine 的分布式架構設計尤為重要:
- 分布式部署:TDengine 支持分布式部署,可將不同區域或建筑的數據分配到不同節點存儲,實現數據的水平擴展,滿足大規模數據管理需求。
- 數據副本:通過設置數據副本,確保數據安全,避免因單點故障導致的數據丟失。
- 高可用性:依托 TDengine 的集群機制,即使部分節點發生故障,系統仍能穩定運行,確保業務連續性。
多維度查詢與分析
在消防業務建模中(zhong),常常需要通過多(duo)維度分析(xi)來排查問(wen)題或輔助決策。TDengine 的(de)標簽功能(neng)非常適(shi)合支持多(duo)維度查詢,例如:
- 查詢某建筑的設備歷史數據;
- 按設備 ID 查詢特定設備的故障記錄;
- 統計某時間段內所有設備的報警次數。
多(duo)維(wei)度查詢(xun)示例如下,以下示例統(tong)計某(mou)建筑(zhu)在特定時間段內的平(ping)均(jun)剩余電流和(he)平(ping)均(jun)相電流:
SELECT AVG(residual_current), AVG(A_phase_current)
FROM electrical_fire_device
WHERE building_id = 'B001'
AND ts BETWEEN '2024-09-01' AND '2024-09-10';
這種靈活(huo)的多(duo)維度查(cha)詢能力,使得問題(ti)排查(cha)和決(jue)策分析更加高效。
結語
消防(fang)行(xing)業的業務建模需要以傳(chuan)感器(qi)數(shu)據、實時監(jian)控(kong)和(he)報警系統為核(he)心。TDengine 憑(ping)借強大的時序(xu)數(shu)據處理能(neng)力,通過超級表、標簽設計、高效查詢(xun)與數(shu)據壓縮機制,為消防(fang)行(xing)業提供(gong)高效的大規模數(shu)據管(guan)理和(he)分(fen)析解決方案。在(zai)業務模型設計中(zhong),我們應充(chong)分(fen)發揮 TDengine 的分(fen)布(bu)式架構、高可用性(xing)(xing)、批量寫入和(he)實時查詢(xun)功能(neng),確(que)保系統的可靠性(xing)(xing)、可擴展性(xing)(xing)和(he)高性(xing)(xing)能(neng)。


























