作者|张方亮,南京市市政设计研究院主任工程师
小 T 导读:作为一家市政专用行业综合性设计院,近几年,南京市市政设计研究院从流域兼顾、区域协调、零碎治理和标本兼治等综合性需要登程,将“厂网河湖岸”融为一体,大力推广零碎治水、零碎运维、智慧运维的理念,与此同时,公司新组建了数字化倒退研究院,以增强在智慧水务方向的研发力度。
作为数研院第一个自主研发的我的项目,淮安智慧水务我的项目须要实现对数十条河道的实时监测和预警,其中蕴含水质监测箱、液位仪、流量计、雨量计、截流井监测计、水泵等多种设施的数据采集和剖析。
快乐之余,也有一个苦恼的事件随之而来——要对如此微小的数据量进行实时监测和预警、采集和剖析,到底怎么的一个数据库能力撑持呢?咱们又该如何进行数据模型设计?
数据库选型重点看什么?
在我的项目最后进行数据库选型时,咱们发现水务零碎的设施数据具备以下几个个性:
- 时序性
- 数据插入后不再批改
- 每个设施的数据之间独立的
- 多维度统计性能
很显然,这些都是典型的物联网数据特色,因而咱们排除了关系型数据库、NoSQL 数据库(如 MongoDB、HBase 等)的选项,将选型范畴放大在了专为物联网设计的时序数据库。
市面上时序数据库产品泛滥,在对多款产品进行比照剖析后,咱们最终抉择了 TDengine,理由如下:
1. 性能优异,兼容性强
尽管接入设施繁多,但 TDengine 兼容性很强,写入、读取和统计效率也大大高于其余数据库,比照 InfluxDB 来看,测试数据显示如下:
2. 接入简略,功能强大
TDengine 将数据库、音讯队列、缓存、流式计算等性能交融,利用无需再集成 Kafka/Redis 等软件,大幅升高了开发和保护的复杂度老本,具备学习成本低、接入疾速等特点,特地适宜咱们的老手团队,全员只用了一周工夫就把握了根本的开发流程。
3. 开源收费,社区沉闷
TDengine 是一款优良的国产软件,在政府类我的项目中十分有劣势。同时,它的技术支持也十分好,社区和微信群很沉闷,你甚至能够和开发人员一对一沟通。大家在应用过程中也会踊跃提供 bug 信息,为开源奉献一点力量,助力 TDengine 变得越来越完满。
引入 TDengine 之后的零碎架构
引入 TDengine 之后,整体的零碎架构如下图所示。
咱们在各个厂商的云平台、DTU/RTU 设施、SCADA 零碎与 TDengine 之间搭建了一个数据中间件,用于解决各种协定和接口,初步解决了各类设施的接入问题,前期会思考自建一个物联网云平台,并接入 TDengine 集群,对接所有智慧类我的项目的物联网数据。
搭载 TDengine 之后的数据模型设计
值得一提的是,在 TDengine 上进行的数据模型设计也很有亮点。
咱们的设施类型包含:液位计、流量计、水质检测箱、雨量计、旧泵站、智慧截流井,上面以“水质检测箱”为例,进行数据结构阐明:
注:地位(location)为河道名称;监测点(id)为河道上某一处中央;设施标识(imei)为每款设施的惟一标识。
数据建模时,具体操作如下:
- 建库语句:
create database if not exists water update 1;
- 建超级表语句:
create table if not exists water.river_meter(ts timestamp, cod float, nh4n float, do float, ss float, ph float, orp float) tags(location ncher(64), id nchar(32));
这里必须要提一下 TDengine 的一个翻新点,即一个采集设施对应一张表, 其中动态创建的子表,可能主动关联父表,在保障高效插入采集数据的同时,也更加不便进行后续的查问统计。
以上述案例来说,其每减少一款水质检测箱,建表为:
CREATE TABLE water.river_meter_x_865374056****** USING water.river_meter TAGS ('小南河','865374056******');
在理论业务中的数据建模展现如下:
- 局部字表——
- 局部子表数据——
- 统计 location=’ 小南河 ’ 的每周水质数据——
总结和冀望
从和 TDengine 单干至今,这一款时序数据库给了咱们很多惊喜,我整顿了一下最有代表性、也是印象最为粗浅的三点:
- 超级表和标签的概念十分惊艳,极大进步了聚合统计的效率;
- 其为每张表在内存中调配了肯定的缓存空间,来存储最热的记录,在应用 last_row 进行实时查问时效率十分高;
- 从最大水平思考到物联网数据的应用场景,其对缓存、音讯队列、流式解决、订阅等性能做了封装,业务开发不须要再过多的关注细节了。
此外,作为极为看好的一款数据库,咱们对 TDengine 也抱有更高的冀望:
- 其一是心愿可能进一步丰盛文档,特地是零碎运维方面,不同体量的数据场景可能对应不必的 TDengine 服务器的配置问题,以及常见的 Q&A。
- 其二是心愿改善下报警性能。当下该性能依赖 AlertManager,此模块通常不会装置,要实现这个性能只能依附业务模块本身去订阅 TDengine,而后给本身发送告警。下一步布局中倡议能将报警信息以回调模式调用接口。
TDengine 让咱们看到了时序数据库之于物联网时代的重要性,不论是从极致性能还是老本管控来看,这款专门为物联网设计和研发的时序数据库都是不可多得的数据库产品。只管还存在优化空间,但瑕不掩瑜,其值得成为数据库选型中的优选对象。
现在淮安智慧水务我的项目曾经顺利验收,半信半疑,TDengine 在我的项目中起到了至关重要的作用,对此咱们对所有参加和保护 TDengine 研发的开发人员和开源贡献者表示感谢,也衷心祝愿 TDengine 倒退越来越好。