作者:杨新霞 上海宇佑船舶架构师

小T导读: 上海宇佑船舶科技有限公司是专一于船舶及陆地信息化一体解决方案的高科技公司。公司次要专一于智慧船舶以及船舶新资料相干产品的研发、设计、生产、销售及国际贸易,为船舶行业提供新资料和智能化信息化解决方案。公司目前提供的产品和解决方案,将会填补船舶行业特地是邮轮游艇行业不足信息化和智能化解决方案和最新船舶新资料的空白。

在大数据时代背景下,船舶智能化曾经成为船舶制作与航运畛域倒退的必然趋势。同时,智能船舶也是《中国制作2025》中明确重点倒退的畛域,代表了船舶将来的方向,关乎航运业的转型降级。

2021年4月初公司接到一个国家级船舶试验基地的智能化革新计划,在制订技术协定的过程中,业主指定要求数据采集应用TDengine数据库。抉择TDengine的外围起因如下:

  • 国产化要求:国产开源,对于国家信息安全有保障,符合国家大趋势倒退。
  • 物联网场景:团队之前正好开发过一个小型的物联网我的项目,过后用的是MySQL数据库,针对数据窗口统计以及返回最新数据查问纷繁复杂。在钻研TDengine时发现这些问题都可能被解决。
  • 学习成本低:咱们的技术团队对关系型数据库(MySQL、Oracle)的SQL语法都比拟相熟,而TDengine采纳的也是规范SQL语句,团队成员上手都比拟快。

值得一提的是,TDengine学习成本低这一劣势使得咱们的团队成员,仅用了很短的工夫就把握了其应用技能,技术危险大大降低。也因而,咱们没有再进行其余更多的技术选型比照,将TDengine作为咱们的底层时序数据存储引擎开始投入使用。

一、技术选型

咱们对TDengine的选型根据,不是凭借着测试数字的论证,而是业务实现的实际测验。

1. 与MySQL相比

团队之前正好开发过一个小型的物联网我的项目,过后用的是MySQL数据库,一些数据窗口的统计以及返回最新数据的查问略显简单,但又没有更好的解决方案,在钻研TDengine时发现这些问题不攻自破。思考到咱们之后要启动的物联网我的项目都比拟大,上述这一问题存在共性,若是可能利用TDengine简化代码逻辑甚至节俭物理存储空间,那公司和业主都将受益匪浅。

2. 通用大数据比照

这一点次要是查问效率和开发成本的劣势。事实上,在我的项目启动后,咱们团队对TDengine的钻研曾经比拟深刻了。后续公司的大我的项目都是船舶行业的物联网我的项目,其中一个比拟大型的我的项目的一期是由其余公司开发的,咱们接手保护。我的项目接手初期,对于此我的项目中应用通用大数据计划实现数据采集可能会产生的效率问题,业主方示意很担心,心愿咱们能够早点优化这一块。于是团队开始着手钻研TDengine数据库在船舶行业的利用,发现TDengine的计划比通用大数据计划更适宜这一场景。

二、数据模型

1. 建模形式剖析

在咱们我的项目中,是用的TDengine举荐的“一个设施一张表”的建模办法。这一建模形式的劣势,除了TDengine官网介绍的通用性的内容,还在咱们我的项目中展示了如下几个长处:

  • TDengine中超级表和子表的设计很好地解决了单个设施写入的工夫戳不会反复的问题
  • 一个设施一张表解决了同一类设施聚合查问的问题
  • 标签的设计能够缩小大量的数据冗余,由此节俭了大量物理存储空间

2. 数据类型剖析

因为咱们存储的数据是来自船上PLC采集数据,因而,咱们首先须要论证的是PLC可能的数据类型在TDengine中是否实现很好的存储。在咱们对数据类型进行匹配比照后,发现TDengine没有这类阻碍。比照如下:

3. PLC工控数据分析

以咱们业务中的船舶电站监控PLC的I/O点为例,至多具备如下数据量:

  • 86个数字量输出
  • 80个数字量输入
  • 13路模拟量输出
  • 10路模拟量输入

这里咱们定的策略是,依照工业自动化管制的分类抉择不同的TDengine数据类型进行存储:

  • 数字量:TINYINT类型
  • 开关量:INT或者FlOAT类型
  • 模拟量和脉冲量:FLOAT类型

4. 业务数据分析

同时,咱们针对性地剖析了可能用于TDengine存储的数据,包含不限于如下内容:

  • 柴油机信号:与柴油机相干的转速、油温、滑油相干的压力、冷却水相干的温度、启动空气压力、排烟总管温度等
  • 发电机信号:发电机的绕组温度、发电电压、电流、有功功率、电压频率、电压与电网电压的相位差
  • 电网的信号:电网相干电压、电网功率、电路电流及电流频率

三、非凡场景需要

1. 场景形容

船舶行业有一种非凡状况,即船舶在海上的时候很有可能没有网络信号,而这个工夫可能会继续一个月之久,也就是船舶上的数据库最长有可能一个月内无奈与岸上的数据中心同步,这就要求船舶在靠港的时候可能在短时间内实现大量的数据同步工作。 咱们利用TDengine打造的技术解决方案如下所示:

2. 重点实现

  • 船端实现:在船端减少应用程序,用于主动连贯Kafka,并向Kafka写入数据
  • Kafka实现:间接将船端和服务端的传输的内容,写入同一个Topic
  • 岸端实现:对岸端服务端数据进行写入

3. 次要设计

  • 技术复用设计:思考到宇佑船舶之前应用Kafka进行同步,这个计划绝对能够复用之前的技术教训
  • 数据结构设计:在船端和集群端建库时,应用DB+船ID的形式作为库名,这样一来,在船端和集群端数据结构统一时,两侧的查问和高效写入SQL都比拟容易解决
  • 主动传输设计:本计划应用船端程序实现主动传输,应用Kafka+TDengine的更新机制保证数据断点续传(只有写入Kafka数据就会写入,而且从新写入数据会笼罩原有数据)
  • 开发工作量:蓝色为须要开发的程序

四、落地成果

1. 写入性能体现

对于写入性能的确认,咱们有个小的教训:在后期论证写入速度时,咱们参考了TDengine官网的测试报告,并进行了局部性能的复现确认。基于此咱们团队用较短的工夫和较少的投入就对TDengine的性能有了大略的理解。

咱们的PLC数据往TDengine中写入的工夫距离最小到100ms/点,写入性能齐全可能胜任。

2. 查问性能体现

因为咱们的智慧船舶零碎刚开始应用TDengine,这方面的积攒还比拟少。除了官网介绍或者参考其余案例的一些比拟广泛的查问外,TDengine毫秒级的工夫窗口查问也让咱们很惊喜,在数月的时间跨度上进行工夫窗口查问也能在秒级实现。

咱们本来打算应用通用大数据解决方案来进行此类查问,当初依靠TDengine工夫窗口统计性能的高效性,开发人员就能够舍弃纷繁复杂的SQL语句,极大地缩减了我的项目周期。

五、经验总结

咱们团队在应用TDengine的落地过程中,感觉有三个教训比拟重要,在此进行下分享:

  • 官网学习:咱们从我的项目开始就认真钻研官网上的技术文档,的确印证了那句话——学习新技术最省力的方法就是看官网
  • 技术发问:除了从官网获取内容,咱们团队也长期混迹于TDengine的官网群,只有把技术细节和问题细节形容清晰,在群里发问都能疾速失去解答
  • 代码示例:在我的项目反对过程中,TDengine的反对人员倡议咱们参考TDengine在Github上的测试代码,这部分代码有大量的函数示例,更加不便进行相干钻研

在最近的沟通中,TDengine技术人员向咱们反馈TDengine后续版本会上线TDLite性能,这个性能可能很好地解决咱们零碎外面[船舶离岸]这种业务场景的“端到端”数据同步问题。TDengine技术人员对咱们业务需要的关注和及时反馈让咱们也对这个性能充斥了期待。

咱们置信,凭借着TDengine数据库在外部已有我的项目的投产,团队积攒下贵重的实践经验,这对公司摸索开发船舶行业物联网产品会大有助益,将来也心愿咱们可能和TDengine继续单干,造成间接面向客户的智能船舶解决方案。


想理解更多TDengine的具体细节,欢送大家在GitHub上查看相干源代码。