小T导读
Guide

本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的优秀投稿,深入探讨了如何在消防行业中运用 TDengine 进行业务建模。文章重点介绍了如何通过 TDengine 的超级表、标签设计和高效查询功能,有效管理消防监控系统中的时序数据。作者详细阐述了实时监控、报警系统以及历史数据分析在消防行业中的应用,展示了 TDengine 在数据压缩、保留策略和分布式架构下的强大优势。

设备模型的超级表设计
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
等标签,精准标识设备位置,同时支持高效的数据查询。
标签设计
device_id:每个设备的唯一标识符。
building_id:设备所在的建筑 ID。
floor_id:设备所在的楼层 ID。
device_address:设备的具体位置描述。
device_type_id:设备类型ID
通过这些标签,我们可以轻松实现条件查询。例如,查询特定建筑或楼层的所有设备数据,或基于设备 ID 精确定位单个设备的数据。
数据压缩与保留策略
CREATE DATABASE your_database_name KEEP 365;ALTER DATABASE your_database_name KEEP 180;
实时报警与历史分析
消防行业的业务需求包括实时报警和历史数据分析:
实时报警:当设备检测到火警、预警或故障时,需要实时触发报警系统。借助 TDengine 的实时查询功能,可以对异常数据进行实时监测,并触发相应的报警机制。
历史数据分析:通过历史数据分析,可以实现趋势预测、设备故障排查和消防事故回溯等任务。例如,通过分析特定时间段内温度、烟雾浓度、电流、电压等变化趋势,识别潜在安全隐患。
CREATESTABLE monitor_event_his (ts timestamp, --时间戳id varchar(32) primary key,event_type int,-- 事件类型(0:火警,1:故障,2:隐患等等)message_id varchar(32),-- 消息idmonitor_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),-- 单位iddeivce_type_id varchar(32),--设备类型device_id varchar(32),-- 设备idbuilding_id varchar(32),-- 楼栋idfloor_id varchar(32)-- 楼层id);
如下是查询最近一分钟内设备上报的隐患:
SELECT *FROM monitor_event_hisWHERE event_type = 2AND ts > NOW - 1m; -- 查询最近
再例如,可以通过 interval
按指定的时间窗口对原始数据进行聚合(即降采样),从而在展示趋势线时显著减少前端从数据库拉取的数据量,提高展示效率。
select avg(residual_current) as avg_residual_current,first(ts) as tsfrom electrical_fire_devicewhere device_id='20240806094407799068' and ts >= now - 7dinterval (10m)
高效批量写入
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');-- 批量插入多条设备数据
分布式架构与高可用性
分布式部署:TDengine 支持分布式部署,可将不同区域或建筑的数据分配到不同节点存储,实现数据的水平扩展,满足大规模数据管理需求。
数据副本:通过设置数据副本,确保数据安全,避免因单点故障导致的数据丢失。
高可用性:依托 TDengine 的集群机制,即使部分节点发生故障,系统仍能稳定运行,确保业务连续性。
多维度查询与分析
查询某建筑的设备历史数据;
按设备 ID 查询特定设备的故障记录;
统计某时间段内所有设备的报警次数。
多维度查询示例如下,以下示例统计某建筑在特定时间段内的平均剩余电流和平均相电流:
SELECT AVG(residual_current), AVG(A_phase_current)FROM electrical_fire_deviceWHERE building_id = 'B001'AND ts BETWEEN '2024-09-01' AND '2024-09-10';
结语

·END·
推荐阅读
2600 万表流计算分析,TDengine 助力数百家超市数字化转型
25-2-11

24-12-31

25-1-13





