本篇文章來自“2024,我想和 TDengine 談?wù)劇闭魑幕顒?dòng)的優(yōu)秀投稿,深入探討了如何在消防行業(yè)中運(yùn)用 TDengine 進(jìn)行業(yè)務(wù)建模。文章重點(diǎn)介紹了如何通過 TDengine 的超級(jí)表、標(biāo)簽設(shè)計(jì)和高效查詢功能,有效管理消防監(jiān)控系統(tǒng)中的時(shí)序數(shù)據(jù)。作者詳細(xì)闡述了實(shí)時(shí)監(jiān)控、報(bào)警系統(tǒng)以及歷史數(shù)據(jù)分析在消防行業(yè)中的應(yīng)用,展示了 TDengine 在數(shù)據(jù)壓縮、保留策略和分布式架構(gòu)下的強(qiáng)大優(yōu)勢(shì)。
在 TDengine 中進(jìn)行消防行業(yè)的業(yè)務(wù)建模,需要根據(jù)消防場(chǎng)景的具體需求,設(shè)計(jì)高效的數(shù)據(jù)存儲(chǔ)、查詢和分析架構(gòu)。消防行業(yè)的業(yè)務(wù)模型通常涉及大量傳感器、報(bào)警設(shè)備等數(shù)據(jù)源,需處理設(shè)備的實(shí)時(shí)數(shù)據(jù)采集、監(jiān)控和歷史數(shù)據(jù)分析。通過優(yōu)化數(shù)據(jù)處理流程,確保系統(tǒng)能高效地管理和分析這些海量的時(shí)序數(shù)據(jù)。
TDengine 是一款專為時(shí)序數(shù)據(jù)設(shè)計(jì)的數(shù)據(jù)庫,廣泛應(yīng)用于物聯(lián)網(wǎng)、工業(yè)監(jiān)控、金融監(jiān)控等場(chǎng)景。這些場(chǎng)景通常涉及大量連續(xù)的數(shù)據(jù)點(diǎn)。以消防系統(tǒng)為例,系統(tǒng)中的各類監(jiān)控設(shè)備(如電氣火災(zāi)監(jiān)控探測(cè)器、煙霧探測(cè)器、溫濕度探測(cè)器、可燃?xì)怏w探測(cè)器等)定期上傳數(shù)據(jù),形成典型的時(shí)序數(shù)據(jù)。其數(shù)據(jù)類型主要包括:
1. 實(shí)時(shí)監(jiān)控?cái)?shù)據(jù):消防物聯(lián)網(wǎng)設(shè)備持續(xù)上傳環(huán)境監(jiān)控?cái)?shù)據(jù),如電壓、電流、溫度、濕度、煙霧濃度和氣體濃度等,其中時(shí)間戳是數(shù)據(jù)的核心。
2. 事件數(shù)據(jù):當(dāng)設(shè)備檢測(cè)到異常情況(如火警、預(yù)警、故障、動(dòng)作或隱患等)時(shí),會(huì)上傳告警信息,幫助及時(shí)響應(yīng)和處置。
3. 地理位置數(shù)據(jù):設(shè)備分布在不同區(qū)域、樓宇、樓層,因此需要記錄設(shè)備的準(zhǔn)確地理位置信息。
在 TDengine 中,針對(duì)這類數(shù)據(jù),我們可以使用超級(jí)表進(jìn)行管理。超級(jí)表不僅能優(yōu)化批量寫入,還能提高查詢效率,確保大規(guī)模時(shí)序數(shù)據(jù)的高效處理。
接下來,我將圍繞設(shè)備模型的超級(jí)表設(shè)計(jì)、標(biāo)簽(Tags)設(shè)計(jì)、數(shù)據(jù)壓縮與保留策略等方面,詳細(xì)解析 TDengine 在消防物聯(lián)網(wǎng)場(chǎng)景中的應(yīng)用。
設(shè)備模型的超級(jí)表設(shè)計(jì)
消防系統(tǒng)中設(shè)備種類繁多,但同類型設(shè)備的數(shù)據(jù)結(jié)構(gòu)高度相似。利用 TDengine 的超級(jí)表(Super Table)進(jìn)行建模,可以為每類設(shè)備創(chuàng)建一張超級(jí)表,讓不同設(shè)備共享統(tǒng)一的數(shù)據(jù)結(jié)構(gòu),并通過標(biāo)簽(Tags)區(qū)分每個(gè)設(shè)備的個(gè)性化信息。
以電氣火災(zāi)監(jiān)控探測(cè)器場(chǎng)景為例,超級(jí)表可進(jìn)行如下設(shè)計(jì):
CREATE STABLE electrical_fire_device (
ts timestamp, --時(shí)間戳
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)
);
設(shè)計(jì)要點(diǎn)如下:
- ts(時(shí)間戳字段): 用于記錄每次數(shù)據(jù)采集的時(shí)間。
- residual_current、A_phase_temperature、A_phase_current、A_phase_voltage 等字段: 存儲(chǔ)電氣火災(zāi)監(jiān)控探測(cè)器上報(bào)的重要實(shí)時(shí)數(shù)據(jù),包括剩余電流、相溫度、相電流、相電壓等。
- 標(biāo)簽字段: 通過
device_id、building_id、floor_id、location_address和unit_id等標(biāo)簽,精準(zhǔn)標(biāo)識(shí)設(shè)備位置,同時(shí)支持高效的數(shù)據(jù)查詢。
- floor_id:設(shè)備所在的樓層 ID。
- device_address:設(shè)備的具體位置描述。
- device_type_id:設(shè)備類型ID
通過這些標(biāo)簽,我們可以輕松實(shí)現(xiàn)條件查詢。例如,查詢特定建筑或樓層的所有設(shè)備數(shù)據(jù),或基于設(shè)備 ID 精確定位單個(gè)設(shè)備的數(shù)據(jù)。
數(shù)據(jù)壓縮與保留策略
消防系統(tǒng)中的監(jiān)控?cái)?shù)據(jù)通常需要長(zhǎng)期保存,以便進(jìn)行事故調(diào)查和分析。因此,在業(yè)務(wù)模型設(shè)計(jì)時(shí)需重點(diǎn)考慮數(shù)據(jù)的壓縮與保留策略:
- 壓縮:TDengine 內(nèi)置高效的時(shí)序數(shù)據(jù)壓縮算法,能夠大幅減少存儲(chǔ)空間,確保海量歷史數(shù)據(jù)的高效存儲(chǔ)。
- 保留策略:針對(duì)長(zhǎng)期保留的消防數(shù)據(jù),可以根據(jù)數(shù)據(jù)優(yōu)先級(jí)設(shè)置合理的保留策略。例如,保留最近一年的詳細(xì)數(shù)據(jù),并定期清理超過一年的低優(yōu)先級(jí)數(shù)據(jù)。
- 多級(jí)存儲(chǔ)與對(duì)象存儲(chǔ):通過配置參數(shù)
dataDir,TDengine 支持集群掛載多塊硬盤,實(shí)現(xiàn)數(shù)據(jù)分級(jí)存儲(chǔ),將不同時(shí)間段的數(shù)據(jù)存儲(chǔ)在不同設(shè)備上,實(shí)現(xiàn)“熱”數(shù)據(jù)與“冷”數(shù)據(jù)分離。例如,最新采集且訪問頻繁的數(shù)據(jù)可存儲(chǔ)在高性能固態(tài)硬盤(SSD)上,以滿足高效讀寫需求,而歷史數(shù)據(jù)等訪問較少的數(shù)據(jù)則可存儲(chǔ)在成本更低的機(jī)械硬盤(HDD)上。此外,TDengine 還支持將時(shí)序數(shù)據(jù)存儲(chǔ)到對(duì)象存儲(chǔ)系統(tǒng)中,并允許對(duì)對(duì)象存儲(chǔ)中的數(shù)據(jù)執(zhí)行刪除和更新操作,進(jìn)一步降低存儲(chǔ)成本,充分利用各類存儲(chǔ)資源。
設(shè)置數(shù)據(jù)保留策略示例如下:
CREATE DATABASE your_database_name KEEP 365;
ALTER DATABASE your_database_name KEEP 180;
實(shí)時(shí)報(bào)警與歷史分析
消防行業(yè)的業(yè)務(wù)需求包括實(shí)時(shí)報(bào)警和歷史數(shù)據(jù)分析:
實(shí)時(shí)報(bào)警:當(dāng)設(shè)備檢測(cè)到火警、預(yù)警或故障時(shí),需要實(shí)時(shí)觸發(fā)報(bào)警系統(tǒng)。借助 TDengine 的實(shí)時(shí)查詢功能,可以對(duì)異常數(shù)據(jù)進(jìn)行實(shí)時(shí)監(jiān)測(cè),并觸發(fā)相應(yīng)的報(bào)警機(jī)制。
歷史數(shù)據(jù)分析:通過歷史數(shù)據(jù)分析,可以實(shí)現(xiàn)趨勢(shì)預(yù)測(cè)、設(shè)備故障排查和消防事故回溯等任務(wù)。例如,通過分析特定時(shí)間段內(nèi)溫度、煙霧濃度、電流、電壓等變化趨勢(shì),識(shí)別潛在安全隱患。
以設(shè)備歷史事件表為例,實(shí)時(shí)查詢示例如下:
CREATE
STABLE monitor_event_his (
ts timestamp, --時(shí)間戳
id varchar(32) primary key,
event_type int,-- 事件類型(0:火警,1:故障,2:隱患等等)
message_id varchar(32),-- 消息id
monitor_flag int,-- 監(jiān)測(cè)項(xiàng)標(biāo)識(shí)
monitor_item varchar(50),--監(jiān)測(cè)項(xiàng)名稱
monitor_item_value FLOAT,-- 監(jiān)測(cè)項(xiàng)值
description varchar(50),-- 監(jiān)測(cè)項(xiàng)單位(MPa,m,℃)
event_id varchar(32)-- 事件id
) TAGS (
device_address varchar(32),-- 設(shè)備地址
unit_id varchar(32),-- 單位id
deivce_type_id varchar(32),--設(shè)備類型
device_id varchar(32),-- 設(shè)備id
building_id varchar(32),-- 樓棟id
floor_id varchar(32)-- 樓層id
);
如下是查詢最近一分鐘內(nèi)設(shè)備上報(bào)的隱患:
SELECT *
FROM monitor_event_his
WHERE event_type = 2
AND ts > NOW - 1m; -- 查詢最近
再例如,可以通過 interval 按指定的時(shí)間窗口對(duì)原始數(shù)據(jù)進(jìn)行聚合(即降采樣),從而在展示趨勢(shì)線時(shí)顯著減少前端從數(shù)據(jù)庫拉取的數(shù)據(jù)量,提高展示效率。
如下是查詢某設(shè)備最近一周的剩余電流情況,按 10 分鐘窗口劃分并計(jì)算平均值:
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)
高效批量寫入
消防監(jiān)控設(shè)備會(huì)生成海量數(shù)據(jù),因此需要確保數(shù)據(jù)寫入的高效性。TDengine 支持高效批量寫入,可以一次性寫入多條數(shù)據(jù),減少頻繁的單條寫入請(qǐng)求,從而大幅提升寫入性能。
批量寫入示例:
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, '強(qiáng)電井內(nèi)',
'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, '強(qiáng)電井內(nèi)',
'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, '強(qiáng)電井內(nèi)',
'340000DW1809068949740978176', '23050000', '20240806094407799068');-- 批量插入多條設(shè)備數(shù)據(jù)
分布式架構(gòu)與高可用性
消防監(jiān)控系統(tǒng)對(duì)數(shù)據(jù)的實(shí)時(shí)性和高可用性要求極高,因此 TDengine 的分布式架構(gòu)設(shè)計(jì)尤為重要:
- 分布式部署:TDengine 支持分布式部署,可將不同區(qū)域或建筑的數(shù)據(jù)分配到不同節(jié)點(diǎn)存儲(chǔ),實(shí)現(xiàn)數(shù)據(jù)的水平擴(kuò)展,滿足大規(guī)模數(shù)據(jù)管理需求。
- 數(shù)據(jù)副本:通過設(shè)置數(shù)據(jù)副本,確保數(shù)據(jù)安全,避免因單點(diǎn)故障導(dǎo)致的數(shù)據(jù)丟失。
- 高可用性:依托 TDengine 的集群機(jī)制,即使部分節(jié)點(diǎn)發(fā)生故障,系統(tǒng)仍能穩(wěn)定運(yùn)行,確保業(yè)務(wù)連續(xù)性。
多維度查詢與分析
在消防業(yè)務(wù)建模中,常常需要通過多維度分析來排查問題或輔助決策。TDengine 的標(biāo)簽功能非常適合支持多維度查詢,例如:
- 查詢某建筑的設(shè)備歷史數(shù)據(jù);
- 按設(shè)備 ID 查詢特定設(shè)備的故障記錄;
- 統(tǒng)計(jì)某時(shí)間段內(nèi)所有設(shè)備的報(bào)警次數(shù)。
多維度查詢示例如下,以下示例統(tǒng)計(jì)某建筑在特定時(shí)間段內(nèi)的平均剩余電流和平均相電流:
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';
這種靈活的多維度查詢能力,使得問題排查和決策分析更加高效。
結(jié)語
消防行業(yè)的業(yè)務(wù)建模需要以傳感器數(shù)據(jù)、實(shí)時(shí)監(jiān)控和報(bào)警系統(tǒng)為核心。TDengine 憑借強(qiáng)大的時(shí)序數(shù)據(jù)處理能力,通過超級(jí)表、標(biāo)簽設(shè)計(jì)、高效查詢與數(shù)據(jù)壓縮機(jī)制,為消防行業(yè)提供高效的大規(guī)模數(shù)據(jù)管理和分析解決方案。在業(yè)務(wù)模型設(shè)計(jì)中,我們應(yīng)充分發(fā)揮 TDengine 的分布式架構(gòu)、高可用性、批量寫入和實(shí)時(shí)查詢功能,確保系統(tǒng)的可靠性、可擴(kuò)展性和高性能。



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



-1.png)




.png)


證.png)


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



