作者:李凯 蓝深远望
小 T 导读:蓝深远望致力于服务政府及大型国有企事业单位的数字化转型,结合大数据、数字孪生、区块链、网络安全等核心技术,为政府运行、社会服务、城市管理、公共安全、基层治理等领域,提供智能场景应用、安全管理、数据运营与产品服务,赋能数字政府创新建设,为各行业应用场景提供支撑服务。
随着科技的发展与人民生活水平的提高,电机在工业生产和人民生活中应用越来越广泛,如工业机器、空调、电梯等。电机的维护成为影响生产效率和生产安全的一项重要事宜。而且在一些环境恶劣的场所,用户更偏向于远程维护。
为了满足这些需求,我们研发了电机物联网监测预警与预测性维护平台。该平台通过传感器、物联网关,采集各电机设备的运行数据以及频谱波形数据,结合大数据建模分析,能够及时发现潜在隐患,实现预测性维护。
一、现状与痛点
电机物联网监测数据类型多、采集频率高,在项目总体设计的初期,我们打算采用传统关系型数据库进行存储。当设备数量较少时(低于 100 台),基于传统关系型数据库的计算函数、多表关联等处理方式,能够满足业务要求。但是考虑到未来接入的电机数量会越来越多(5000 台以上),设备的测点也会越来越多,平台问题也就会越发严峻。具体可以归纳为如下两个方面。
- 扩容实施难
采用传统的关系型数据库,局限于传统的库表设计模式,每新增一个电机设备接入,必须针对这个电机设备建立一张新的数据表,这个大大增加了接入设备时的工作量;同时,随着平台接入的电机设备越来越多,数据库表不断增加,传统数据库的管理和备份成本不断提高,无法做到水平扩容。 - 业务开发难
伴随着业务的不断发展,大量的电机设备接入平台,各种聚合分析统计需求持续增加,由于传统关系型数据库的特点,导致各种跨库跨表的查询操作激增,业务数据耦合度增大,系统开发的难度也随之提升,同时对平台整个的响应速度和稳定性也会造成很大隐患。
二、为什么选择 TDengine
为了适应未来业务发展需求,避免上述难点与困境,我们决定选择一款时序数据库产品。在调研了多款产品之后,TDengine 引起了我们的注意,它的如下几个特点非常适合我们的场景:
- 高性能:数据读写速度非常高;
- 集群化:可以集群化部署,支持多副本,支持水平扩展;
- 安装便捷: 官网文档齐全,按照文档很容易就能完成安装部署;
- 开源:开源,而且社区非常活跃,很多问题都可以在社区找到答案;
- 使用简单:支持使用类 SQL 查询语言来插入或查询数据。
于是我们马上做了各种验证,结果表明,TDengine 完全符合我们的业务需求。
引入 TDengine 之后,平台整体的数据架构如下图所示。
三、TDengine 存储模型设计
TDengine 里有一个特殊的概念:超级表,每种数据采集类型对应一个超级表。超级表只负责存储这种类型的数据,同时数据存储采用横表存储。
我们将电机设备的测点幅值超级表设计成如下结构:
CREATE STABLE IF NOT EXISTS general_view_escalator (ts TIMESTAMP, elect_machine_one FLOAT, reducer_machine_one FLOAT, bottom_bolt_one FLOAT, elect_machine_two FLOAT, reducer_machine_two FLOAT, bottom_bolt_two FLOAT, left_main_drive FLOAT, right_main_drive FLOAT, left_step_chain FLOAT, right_step_chain FLOAT, up_main_drive_noise FLOAT, down_step_chain_work_noise FLOAT, left_step_chain_extend FLOAT, right_step_chain_extend FLOAT, left_handrail_temperature FLOAT, right_handrail_temperature FLOAT, env_temperature FLOAT, elect_machine_temperature FLOAT, reduction_gearbox_one_oil FLOAT, reduction_gearbox_two_oil FLOAT, rmd FLOAT) TAGS (line_id BINARY(20), site_id BINARY(20), elevator_code BINARY(20));
波形超级表设计如下架构:
CREATE STABLE IF NOT EXISTS waveform_view_escalator (ts TIMESTAMP, vals BINARY(16000), samplehz INT, len INT, ratio INT) TAGS (line_id BINARY(20), site_id BINARY(20), elevator_code BINARY(20), measuring_id BINARY(20));
TDengine 还有另外一个概念:子表。每台电机设备的数据对应一张子表,它可以在插入数据时动态创建。这种操作模式可以省去创建子表的业务环节,大大降低了业务复杂度。
四、用到的 TDengine 特性
- 数据订阅(Publisher/Subscriber)
在我们的业务场景中有一类数据叫预警、报警事件告警数据,直接使用 TDengine 的数据订阅功能,可以优雅快速地实现这一功能。
- 缓存(Cache)
在我们的业务场景中,需要显示每台电机设备的最新测量数据(如幅值、频谱等),直接使用 TDengine 提供的缓存(Cache)功能,创建数据库时设置参数 cachelast=1,将每张表的最后一条记录缓存,应用程序可以通过 last_row 函数快速获取当前的实时数据,进行动态数据刷新显示。
- 其它有用功能
比如采样查询、多表聚合查询、流式计算等,可以满足我们多种业务场景的需求。
原来项目中有很多需要在程序中处理的计算工作,现在全部由 TDengine 承担,在分担程序的计算压力的同时,还可以实现聚合结果的持久化存储,支持历史数据快速查询。
五、总结
TDengine 作为一款新的产品,我们在使用过程中遇到了一些困难和挑战。不过在同事们的支持下,在涛思数据工程师们的热心支持下,我们还是相对顺利地完成了项目的上线。
目前平台的状态是,当前设备接入 300 台,每台设备 19 个测点,数据采集频率达到 1 秒钟,存储的数据维度更精细了,能为平台的智能诊断、智能分析服务提供更准确的数据支持,同时各业务场景下的计算查询性能也非常优秀,满足了项目的实际需求。
作者介绍:
李凯,蓝深远望大数据研发组负责人,2015 年起从事大数据研发,2020 起从事电机大数据平台运维研发。