标签 流式计算 下的文章

小T导读:在智慧港口的建设过程中,面对海量物联网设备产生的时序数据(如设备状态、能耗、作业效率等)的高效接入与实时分析需求,山东港口科技选择采用 TDengine TSDB 时序数据库作为核心数据底座,以应对传统关系型数据库在处理高并发、大规模时序数据时的性能瓶颈,实现设备状态的实时监控、数据压缩存储与智能分析,为智慧港口的数字化转型与智能化运营提供强有力的数据支撑。本次将就此实践进行具体分享。

合作背景

在“智慧港口”的宏伟蓝图下,山东港口科技集团面临着海量物联网设备数据接入、处理与分析的严峻挑战。港口作业涉及大量的桥吊、门机、集卡、传感器等终端设备,这些设备 7x24 小时不间断产生巨量的时序数据(如位置、状态、能耗、效率指标等)。传统的通用关系型数据库在处理这类高并发、海量的时序数据时,显得力不从心。为了夯实智慧港口的数据根基,经过严谨的选型,我们最终选择了 TDengine TSDB 作为核心时序数据平台,以支撑关键业务系统的数字化转型。

选择 TDengine TSDB 的原因

在引入 TDengine TSDB 之前,我们的业务系统主要面临以下痛点:

  • 数据膨胀与存储成本高:​ 港口设备每秒产生数以万计的数据点,若采用传统数据库存储,数据表会急剧膨胀,不仅占用大量存储空间,且备份和维护成本高昂。
  • 查询分析效率瓶颈:​ 对于实时监控、效率分析和历史数据回溯等场景,传统数据库的查询响应速度慢,无法满足业务对“实时洞察”的要求,特别是在聚合计算大量设备的历史数据时,耗时长达分钟甚至小时级。
  • 系统架构复杂:​ 为了应对不同的数据处理需求(如实时、短期、长期),往往需要组合使用多种数据库和技术栈(如 Redis、MySQL、Hadoop 等),这增加了系统架构的复杂性、开发和运维难度。

TDengine TSDB 作为专为时序数据设计的数据库,其超高性能、内置缓存和流式计算功能、极简的架构以及强大的数据压缩能力​,恰好精准地解决了上述痛点,成为我们的理想选择。

使用 TDengine TSDB 后的收益与业务提升

部署 TDengine TSDB 后,我们在多个方面获得了显著收益:

  • 极致的性能提升:​ 对港口设备运行状态的查询响应速度从原来的“分钟级”提升到“毫秒级”,实现了真正的实时监控与告警。
  • 显著的降本增效:TDengine TSDB 高效的数据压缩技术,使得存储空间节省超过 80%,大幅降低了硬件与运维成本,简化的架构也减少了运维团队的工作负担。
  • 增强的数据驱动能力:​借助 TDengine TSDB 强大的时序数据计算能力,业务团队能够轻松进行设备效率分析、预测性维护和运营优化,为决策提供坚实的数据支持,进一步强化了“智慧港口解决方案”的核心优势。
  • 加速创新应用落地:借助 TDengine TSDB 这一稳定的高性能数据底座,我们能够快速开发和部署新的数据密集型应用,如全自动码头的智能调度系统、物流供应链的可视化平台等。

核心业务场景与 TDengine TSDB 应用实例

场景一:港口岸桥设备实时状态监控与效率分析

  • 业务描述:​ 实时监控码头所有岸桥(Quay Crane)的运行状态(如起升、下降、大车行走、小车行走)、能耗以及作业效率(如单箱能耗、作业周期),确保设备安全高效运行,并即时发现异常。
  • TDengine TSDB 查询 SQL 示例:
-- 1. 查询指定岸桥(Crane_ID = 'QC08') 在过去10分钟内的平均功率和总能耗
SELECT AVG(power_kw), SUM(power_kw * ts_interval / 3600) AS total_energy_kwh
FROM crane_power_metrics
WHERE crane_id = 'QC08' AND ts >= NOW - 10m
INTERVAL(1m);

-- 2. 统计过去1小时内,所有岸桥的作业箱量(基于每次吊装动作计数)
SELECT crane_id, COUNT(*) AS operation_count
FROM crane_operation_events
WHERE ts >= NOW - 1h AND operation_type = 'lift_complete'
GROUP BY crane_id;​

通过 TDengine TSDB 毫秒级查询与高效聚合能力,我们实现了对数百台岸桥设备运行状态的实时监控(1 分钟粒度)与异常秒级捕捉,查询效率从分钟级提升至毫秒级,存储成本降低超 80%,极大提升了设备管理实时性与安全性。

场景二:智能集卡(AGV/IGV)调度与路径优化

  • 业务描述:​ 追踪自动化码头内数百台智能导引车(AGV)的实时位置、速度、电池电量和状态,基于这些时序数据进行最优路径规划和调度,避免拥堵,提升整体物流周转效率。
  • TDengine TSDB 查询 SQL 示例:​
-- 1. 查询所有电量低于20%的AGV的当前位置和最新电量
SELECT last(latitude), last(longitude), last(battery_level)
FROM agv_status_metrics
WHERE battery_level < 20
GROUP BY agv_id;

-- 2. 计算指定区域(如A01区)过去5分钟内的平均车辆速度,用于判断拥堵情况
SELECT AVG(speed_kmh) AS avg_speed
FROM agv_location_metrics
WHERE ts >= NOW - 5m AND zone_id = 'A01';

借助 TDengine TSDB 的 last() 实时状态查询与窗口聚合能力,我们实现了对数百台 AGV 的实时位置、电量及速度监控,低电量车辆识别与区域拥堵判断均达到秒级响应,调度效率提升约 50%\~70%,整体物流周转更高效、更智能。

场景三:港口风速风向监测与预警

  • 业务描述:​分布在港区各处的气象站持续采集风速、风向数据。系统需要实时判断是否超过安全作业阈值,并及时向相关设备和人员发出预警,保障恶劣天气下的作业安全。
  • TDengine TSDB 流计算 SQL 示例:​
-- 创建流式计算,持续监控风速,一旦发现某个站点每分钟一次的平均风速超过阈值(18m/s),则触发告警
CREATE STREAM wind_alert_stream
INTO wind_alert_events
AS
SELECT _wstart AS ts, station_id, AVG(wind_speed) AS avg_wind_speed
FROM weather_station_metrics 
PARTITION BY station_id
INTERVAL(1m) SLIDING(1m);

-- 查询历史告警记录
SELECT * FROM wind_alert_events WHERE ts >= TODAY ORDER BY ts DESC;

解析如下:

  • CREATE STREAM wind\_alert\_stream 定义了一个名为 wind_alert_stream的流,用于持续处理实时数据。
  • INTO wind\_alert\_events 将流计算的结果写入到 TDengine TSDB 中的 wind_alert_events表中,该表为一个超级表,按照分组会自动生成子表,用于存储每个分组的告警事件。
  • SELECT \_wstart AS ts, station\_id, AVG(wind\_speed) AS avg\_wind\_speed 选择数据流中的时间戳(\_wstart)、站点 ID(station\_id)以及风速的平均值(AVG(wind\_speed))。_wstart是该时间窗口的起始时间,作为告警触发的时间点。
  • FROM weather\_station\_metrics 数据源是 weather_station_metrics表,该表应包含字段如:ts(时间戳)、station_id(站点 ID)、wind_speed(风速-单位:m/s)等。
  • PARTITION BY station\_id 按站点分组,每个站点独立计算,避免不同站点之间的数据干扰。
  • INTERVAL(1m) SLIDING(1m) 定义了 1 分钟的时间窗口,每 1 分钟滑动一次,即每分钟统计一次过去 1 分钟内的数据。

借助 TDengine TSDB 灵活的流计算能力(1 分钟滑动窗口),我们实现了港口风速的实时监测与自动告警(响应时间<1 分钟)。原本需要多个大数据组件才能完成的处理流程,如今只需一条语句即可完成,告警的准确性与时效性显著提升,安全运维效率也随之大幅提高。

结语

通过引入 TDengine TSDB,我们成功构建了一个高性能、高可用的时序数据管理平台,有效解决了智慧港口建设中海量物联网数据处理的核心难题。这一合作不仅提升了现有业务的运营效率和智能化水平,也为未来探索更多基于数据的创新应用(如数字孪生港口)奠定了坚实的基础,有力地支撑了山东港口科技集团有限公司打造“行业领先的高新技术上市企业”的战略目标。

关于山东港口科技

山东港口科技集团有限公司是山东省港口集团为全力推进智慧港口建设而设立的高科技子公司。公司立足信息化顶层设计、核心应用系统研发和大数据应用,致力于打造物流供应链服务平台、智慧港口解决方案和自动化应用系统三大核心优势。作为一家以创新为驱动的高新技术企业,科技集团正积极利用数字技术,为全球港口行业的智能化升级注入科技力量。

作者:张艳明

小T导读:作为国内领先的智能办公整体方案提供商,成都极企科技有限公司已为全球上万家企业提供智能化建设方案,覆盖办公楼宇与园区面积已超百万平米。为应对日益增长的物联网数据接入需求,极企科技引入 TDengine TSDB 时序数据库,实现海量设备数据的实时采集、高效存储与智能分析,显著提升了设备监控系统的响应速度与数据处理能力。本文将分享这一智慧楼宇解决方案基于 TDengine的应用经验与实践成果。

背景和痛点

我们的智慧楼宇解决方案主要面向集团总部、新建办公大楼、政府园区等行业头部客户。这类客户普遍具备完善的 IT 基础与多年的办公系统建设经验,正处于从传统办公向智能化、数字化升级的关键阶段。在这一过程中,他们对智能化办公、物联网和数字化管理有较高的认知与明确的建设需求,期望通过新一代技术手段实现办公环境的智能协同与运营效率的全面提升。

在某大厦智能化项目中,共有 30 层楼宇,部署近万台传感器设备,涵盖人体感应、空气质量、厕位、烟雾、电量、水浸等多种类型。所有传感器均以秒级频率上报数据,日均数据量高达数千万条,对系统的数据采集与处理能力提出了极高要求。

该项目面临设备数据高频采集、多维度实时分析(设备状态、能耗、故障预测)以及历史数据长期存储三大挑战。传统关系型数据库在此类场景中存在明显不足,如写入性能瓶颈、查询延迟高、存储成本激增等问题。以 MySQL 和 PostgreSQL 为例,在存储设备时序数据时,由于缺乏原生的时间分区支持,当单表数据量超过千万级后,查询性能会出现断崖式下降,需人工分表分库,运维复杂度激增。同时,未压缩的原始数据占用空间庞大,存储成本高昂。

为什么选择 TDengine TSDB

在智慧楼宇项目的建设过程中,数据接入规模大、处理链路复杂、系统稳定性要求高,对底层数据库的性能与可靠性提出了极高要求。经过多方技术选型与验证,我们最终选择了 TDengine TSDB 作为核心时序数据库,主要基于以下考虑:

  • 高效数据接入能力:支持 MQTT 数据写入方式,可通过低代码方式快速接入业务平台,实现高并发数据写入,确保近万台传感器上报数据的完整与可靠。
  • 强大的流式计算能力:具备实时数据聚合与分析能力,能够对上报的时序元数据进行整合并高效供给业务平台,同时通过多副本机制保障数据高效写入与可靠备份。
  • 完善的技术支持体系:提供一对一、7×24 小时技术支持服务,确保项目在开发、部署及运维阶段的稳定运行。
  • 国产化与生态兼容性:作为 100% 自主可控的时序数据库,TDengine TSDB 符合信创标准,并已与华为云、麒麟软件等生态厂商完成深度集成,满足极企科技在国产化替代中的技术选型需求。
  • 领先的综合性能与可拓展性:在同类型数据库中,TDengine TSDB 在数据压缩率、写入速度、分析效率及分布式架构等方面表现突出,后续版本还将持续增强易用性与 AI 能力,支持更多的功能和场景,助力企业进一步提升应用效果。

TDengine TSDB 落地实践

架构描述

系统采用 Node-Red 作为数据流控制与可视化管理核心,实现全链路的数据采集、处理与展示。整体架构如下:

  1. 各类传感器采集的数据首先由 Node-Red 进行预处理后写入 EMQ 消息中间件;
  2. TDengine TSDB 通过 taosX 模块从 EMQ 中高效读取并存储数据,实现时序数据的集中管理;
  3. EMQ 再通过 Restful / WebSocket 接口从 TDengine TSDB 获取所需数据,为上层业务应用与可视化系统提供实时访问能力。

智能应用场景示例

  • 当指定区域内连续 5 分钟无人时,系统自动关闭照明;
  • 当某项监测指标超过设定阈值时,自动触发告警并记录相关信息;
  • 当检测到某区域无人时,系统自动关闭空调以节约能源。

项目初期采用 3 节点集群架构,数据库配置为 3 副本模式,以实现系统高可用与数据冗余,具体配置如下:

系统上线后该集群运行稳定,能够高效处理全部传感器采集数据,全面满足项目预定的各项指标。在确认技术架构稳定可靠后,我们将订阅模式变更为永久模式,将长期使用以 TDengine TSDB 为核心的技术架构。

数据库建模

  1. 超级表定义
CREATE STABLE IF NOT EXISTS airsensor (
  ts timestamp,        时间
  pm25 int,        PM2.5
  pm10 int,        PM1.0
  tvoc int,                TVOC
  co2 int,                二氧化碳
  formaldehyde float,        甲醛
  noise float,        噪音
  temperature float,                温度
  humidity float,        湿度
  light int,                光照
  h2s int,                硫化氢
  ch4 int,                甲烷
  co int,                一氧化碳
  no2 float,        二氧化氮
  h2 int,                氢气
  odor float        异味
) TAGS (
  position NCHAR(200),
  space NCHAR(20),
  floor_area NCHAR(20),
  floor NCHAR(20),
  area NCHAR(20),
  device_code NCHAR(20),
  device_id int,
  factory NCHAR(50),
  model NCHAR(50)
);

  • 流计算

    • 会议室人员判定
    create stream if not exists mroom_stream trigger at_once into mroom_stream_status (ts,status) tags(
        space,
        floor_area,
        floor,
        area 
    ) subtable(
        cast(
            concat('mss_', space, '_', floor_area, '_', floor, '_', area) as varchar
        )
    ) as
    SELECT
        _wstart as ts,
        case
            when sum(status) > 0 then 1
            else 0
        end as status
    FROM
        bxserver.humensensor partition by space,
        floor_area,
        floor,
    area interval(1m) fill(value,-1);

  • 楼层用电量统计
select _wstart as ts, max(total_kwh)-min(total_kwh) as used from bxserver.powersensor partition by tbname interval(1d);

  • 订阅数据

落地效果

  • 针对电量传感器采集的元数据通过 TDengine TSDB 转换后的每个楼层用电量统计如下:

  • 针对每个设备状态上报数据通过 TDengine TSDB 转化为设备告警情况如下:

  • 针对空气传感器采集的数据,系统通过 TDengine TSDB 进行转换与分析,并根据当前区域的平均温度执行相应的温控策略:

TDengine 应用经验分享

  1. 时钟同步问题

在使用过程中,我们发现某会议室的人体传感器流计算结果存在异常,最近一分钟的数据未被正常计算。经排查,原因是服务器时间未与时间服务器同步。安装并配置 NTP 服务完成时间同步后,流计算功能恢复正常。

  1. 查询 SQL 语句优化

powersensor_loop 表按行记录传感器的瞬时实测值。为计算当天的用电量,需要对相邻两行取差值后再用 SUM 求和。最初我们采用的是如下嵌套子查询方案,不仅执行时间长,而且占用较大的临时空间:

select TO_CHAR(_wstart, 'YYYY/MM/DD HH24:MI:00') as ts, TO_CHAR(_wstart, 'HH24') as hour, sum(kwh) as kwh, space,floor_area,floor,type from (select _rowts as ts, diff(kwh) as kwh, space, floor_area, floor, area, device_id, loop, type frombxserver.powersensor_loop partition by space, floor_area, floor, area, device_id, loop, type) where ts >= TO_UNIXTIMESTAMP('2025-08-28 00:00:00') and ts <= TO_UNIXTIMESTAMP('2025-08-28 23:59:59') partition by space, floor_area, floor, type interval(1d) order by floor asc;  

powersensor\_loop 表结构如下图所示:

经分析发现,上述嵌套查询语句只在外层添加了时间范围条件,而内层查询未作限制,导致内层查询需读取全量数据,执行耗时长且占用大量临时空间。优化后,我们将时间范围条件前移至内层查询,使其仅在指定时间范围内读取数据,从而显著减少数据扫描量并提升执行效率。

select TO_CHAR(_wstart, 'YYYY/MM/DD HH24:MI:00') as ts, TO_CHAR(_wstart, 'HH24') as hour, sum(kwh) as kwh, space,floor_area,floor,type from (select _rowts as ts, diff(kwh) as kwh, space, floor_area, floor, area, device_id, loop, type frombxserver.powersensor_loop where ts >= TO_UNIXTIMESTAMP('2025-08-28 00:00:00') and ts <= TO_UNIXTIMESTAMP('2025-08-28 23:59:59') partition by space, floor_area, floor, area, device_id, loop, type) partition by space, floor_area, floor, type interval(1d) order by floor asc;

未来规划

当前系统使用的版本为 TDengine TSDB 3.3.6,因流计算暂不支持 diff 函数,无法直接计算相邻数据差值。后续我们计划升级至最新版本 3.3.8,新版本已支持 diff 函数,可将每日电量数据的差值计算结果直接写入流计算结果表,进一步简化后续的查询与汇总分析流程。

关于成都极企科技

成都极企科技有限公司成立于 2014 年,注册资本 392 万元,专注于智能化办公解决方案的研发与落地。公司具备自主软硬件研发能力,已取得多项国家专利及资质认证,为全球上万家企业提供智能化解决方案,累计完成超过百万平方米的办公楼宇与园区智能化建设。客户涵盖美团、爱奇艺、腾讯、阿里、联想、华为、富力、金地等行业头部企业,形成了从硬件设计、软件开发到工程实施的一体化核心竞争力。

关于作者

何铮,公司创始人兼项目带头人,毕业于电子科技大学,国家特聘专家。拥有二十年办公领域产品开发经验,带领企业完成三轮千万级融资。