热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TDengine在钢铁冶金行业能源管理系统中的应用

作者介绍:徐子攀,上海旬思科技有限公司研发总监,长期从事底层工业通讯协议开发,独立完成多种主流PLC、流量计等工业设备通讯采集驱动开发,对工业现场数据采集相关技术有深入研究。近年参

作者介绍: 徐子攀,上海旬思科技有限公司研发总监,长期从事底层工业通讯协议开发,独立完成多种主流PLC、流量计等工业设备通讯采集驱动开发,对工业现场数据采集相关技术有深入研究。近年参与工业互联网平台构建工作,负责平台架构设计以及主要业务代码开发工作。 TDengine在钢铁冶金行业能源管理系统中的应用

上海旬思科技有限公司专注于工业大数据平台实时数据采集、设备远程监测及预测性维护、机器协同互联、远程实时控制等多个工业领域。背靠上海临港新片区针对工业互联网、智能制造领域的产业扶持,打造国内工业互联网行业先进产品和技术的先锋企业。

旬思工业互联平台(TServer)是面向工业企业建立大数据平台的产品解决方案,提供数据采集、解析、展示、报警、统计、查询、分析以及远程运维通道管理等功能,内置实时数据库引擎,融合传统SCADA软件和工业互联网架构技术,适用于工业互联网行业的赋能创新。


项目背景和技术难点

湖北某特钢公司的电力能源介质的计量,是通过TBox工控网关采集多功能电表来实现的。按照《关于湖北电网2020-2022年输配电价和销售电价有关事项的通知》,需要完善并实现“峰谷平尖”电能量费率计量和能源报表。TBox工控网关基于前期项目实施和实际应用需求提供了完整的技术方案,包含从电表采集电能数据并写入TDengine时序数据库,再经过ETL工具处理后转存到Oracle数据库,从而满足企业一期电能量数据报表对实时数据采集和存储的要求。

本项目主要接入的能源介质有:电力、焦炉煤气、高炉煤气、转炉煤气、压缩空气、天然气、氧气、氮气、氩气、蒸汽、净水、软水、除盐水和生活水等,项目一期首先要求采集电能量数据,其中需要接入的电表多达874块,电力能源数据已超20000点,每天产生的数据量在2800万条以上;项目二期如果再接入非电数据,还会有几千个流量设备的接入,整个系统数据点也将远超50000点,每天产生的数据量预估在1亿条左右。

在设备通讯数据采集方面,我们一直处于行业领先水平;但对于大数据量的存储,选择什么样的数据库,是否也能满足二期大数据量的接入能力,给我们带来了极大的挑战。

本项目特点:



  • 开发周期短:用户要求系统一个月上线;

  • 稳定性要求高:工业应用的特点,系统无人化运维;

  • 单机性能要求:在用户提供的一台16核32G内存服务器上,需要完成所有工作,包含数据上传、处理和转存等服务;

  • 系统兼容性:同时要考虑满足二期50000+点的数据接入能力。


选择 TDengine的理由

为了解决大数据量带来的数据存储难点,以及满足系统性能要求,我们在数据库选型方面,做了充分的调研:



  • MySQL:传统关系型数据库

开源免费,安装使用简单,维护成本低,很少宕机,支持多操作系统。



  • InfluxDB:时序数据库

可以高性能地查询与存储时序型数据,被广泛应用于存储系统的监控数据、IoT行业的实时数据等场景;集群功能没有开源。



  • TDengine:国产时序数据库

国产开源,针对工业互联网场景做了大量优化,同时还支持滑动窗口,流式计算。开源了集群版本。

分析项目需求不难发现,时序数据库更适合此类工业大数据应用。而在同等数据集和硬件环境下,涛思官方的测试结果显示,TDengine的写入速度远高于InfluxDB。同时TDengine支持多种数据接口,包含C/C++,Java,Python,Go和RESTful等。由于我们数据解析部分使用Go语言编写,所以最终采用了Go Connector接口方式进行时序库读写。


应用 TDengine 的场景、业务架构

本项目场景的能源管理类数据除时序特征外,还具有其他多种明显特征:



  • 数据结构简单,写多读少;

  • 数据极少需要更新或删除;

  • 流量平稳,根据设备数量和采集频次,可预测;

  • 数据保留期限为10年;

  • 数据的查询分析是基于时间段和空间区域;

  • 除存储、查询操作外,还需要各种统计和实时计算操作;

  • 数据量巨大,一天采集的数据可能超过1亿条。

根据上述数据特征,结合TDengine给的建议,以及本项目数据特点和使用场景,我们做了以下优化设计:



  • 包含模拟量,数字量,报警,系统日志等类型数据,同类型使用一个超级表集合;

  • 单个数据点对应单个表存储;

  • 批量数据写入,最大化SQL字符串拼接,提高数据写入效率;

  • Go多协程并发写入,进一步提高写入效率。

库结构设计:保留update功能,方便后期对坏数据做二次处理。

普通表一览:基于超级表自动生产普通点表。

电力能源数据一览:数据上传平台后解析并显示。

电力能源数据滑动查询:根据查询时间长度自适应选择滑动窗口大小。

下图是本项目完整业务架构图,TBox工控网关南向采集现场电力能源数据,北向实时上传数据到TServer工业互联平台;TServer接收到数据后,通过解析识别,分类组包高并发写入TDengine时序库。


前期调研,TDengine优势再体现

在这里我们首先提两个工业实时数据库。 一个是Wonderware的高性能实时关系型数据库InSQL,它集成了微软公司的MS SQL Server并对其进行了扩展,具有高效数据压缩和数据存储等实时数据库功能,它比常规关系型数据库的数据采集速度、存储量高数百倍。

InSQL扩展了SQL语句,使其具有了时间特性。InSQL的运行性能与所用的硬件系统有关,单机可以在1秒内完成6万个点的取数或存储(峰值)。这个速度与数据存贮方式无关,采用的周期性存储(以固定的多少毫秒存储一次)或增量存储(数据的变化超过设定百分比时存一次)。InSQL可以每秒存储3万点(均值)或每100毫秒存2000点数据。要提高数据采集速度,主要障碍是大多数数据源(PLC或DCS)提供数据的速度赶不上InSQL取数的速度。InSQL的最小分辨率为3.3毫秒。

另一个是OSI的PI数据库,每个PI的高端产品服务器中可以处理每秒钟15万点的数据。在客户端软件ProcessBook上,可以在秒级时间内从2年或3年历史中取到1000点数据。在OSI的WEB网站上有一个电子表格可以帮助你详细计算所需的配置。

TDengine是涛思数据面对高速增长的物联网大数据市场和技术挑战推出的创新性的大数据处理产品,在时序空间大数据处理上,有着自己独到的优势。TDengine单核每秒能处理至少2万次请求,插入数百万个数据点,读出一千万以上数据点,比现有通用数据库快十倍以上,也远远超出了InSQL、PI这两个工业实时数据库的读写能力。


TDengine问题解决

使用TDengine过程中,几乎没有遇到什么大问题。一些小bug也可以通过版本升级解决。这里要对涛思数据的物联网大数据微信交流群,以及非常热心的涛思工程师陈玉同学,在我们一期系统上线后遇到的配置错误导致服务启动失败的积极快速响应表示感谢。


未来规划

本项目一期电力能源数据的采集早已上线运行3个多月,用户也非常认可这套系统。我们在给用户培训过程中,也强力推荐了国产的TDengine数据库,相信未来这些用户也将成为TDengine的忠实粉丝。

我们正在准备项目二期非电能数据的采集,这次变量会成倍增长,同时也会面临新的挑战,比如分布式存储,热冗余备份等作为大数据量接入和数据安全备份的必要保障。

经过一期成功经验的积累,我们相信二期新系统也会很顺利的交付运行。后续在石油管道,冶金智能制造等更多场景中,也在尝试使用TDengine时序库作为我们的存储方案。 对于TDengine,我们也有一些期待升级改进的地方:



  • 推出Windows平台的Server端;

  • 更多的SQL语句支持,支持更丰富的复杂计算;

  • 更稳定运行,异常不重启服务。 



推荐阅读
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 忙而不盲:探索高效工作的艺术
    本文探讨了在日常工作中如何避免盲目忙碌,通过理解和应对稀有事件、管理负面情绪以及明确学习目标,提升工作效率和个人成长。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 解决vCenter vSphere HA初始化失败的问题
    本文探讨了在集群中遇到的所有vSphere HA主机状态显示‘无法正确安装或配置vSphere HA代理’错误的情况,并详细介绍了排查与解决步骤,包括检查HA初始化错误及安装HA代理的常见故障排除方法。 ... [详细]
author-avatar
成长的人走在路上_774
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有