TDengine在中节能风力发电运维系统中的落地实践

网友投稿 756 2022-11-07

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

TDengine在中节能风力发电运维系统中的落地实践

作者:潘文彪

小 T 导读:中节能风力发电股份有限公司(股票简称:节能风电,股票代码:601016)是中国节能环保集团有限公司控股的现代股份制公司。公司先后成功中标并示范建设了国家第一个百万千瓦级风电基地启动项目——河北张北单晶河200兆瓦风电特许权项目,和第一个千万千瓦级风电基地启动项目——甘肃玉门昌马200兆瓦风电特许权项目,是国家首个百万千瓦、千万千瓦风电基地的示范者和引领者,在业内树立了较高的知名度和良好的品牌形象。建成、在建项目装机规模547.97万千瓦,已发展成为张北坝上地区、甘肃河西走廊地区最大的风电开发商之一,是我国风电领域一支重要的力量。

一.项目背景

公司作为中节能集团在风电领域的专业化公司和核心上市平台,具备成熟的风电开发和运维经验,但是随着在建风场逐步增多以及各类新型传感器的加装,传统运维方式已经越来越吃力,数字化智能化的需求越来越强烈,因此迫切需要基于海量时序数据的数据平台来支撑繁杂的运维工作。

因此,我们做了大量的时序数据调研工作。但是选型工作也并非一帆风顺,开始我们尝试传统的工控时序数据库,但是随着测点数量的增多,单机版架构已经无力支撑,后期我们也尝试了InfluxDB和OpenTSDB等分布式架构的时序数据库,但是性能又达不到要求。

机遇巧合,我们注意到一款国产、开源的时序数据库TDengine,所以也尝试了一下。

二.TDengine选型测试

针对我们重点关注的查询性能,我们做了如下几个测试。

1.单测点历史数据聚合查询

随机选择任一个测点,查询该测点在某个时间段测点采集值的count,max,min,avg;比如从2020-01-01 00:00:00.000 到 2020-02-01 00:00:00.000的31天内的共535680条数据记录的count,max,min,avg。具体的查询语句为:

select count(*),max(col117),min(col117),avg(col117) from t_QH01 where ts>='2021-08-15 00:00:00.000' and ts<'2021-08-16 00:00:00.000'

实验截图如下:

3次查询测试时延如下:

测试批次

时延(秒)

1

0.635000

2

0.145000

3

1.492000

平均值

0.7573333333333333

2.分组聚合查询

查询某个时间段内测点采集值的count,max,min,avg,比如查询从2020-01-01 00:00:00.000 到 2020-02-01 00:00:00.000的31天内的数据记录的count,max,min,avg。数据库中对应查询语句为:

select count(*),max(col117),min(col117),avg(col117) from t_QH01 where ts >='2021-08-01 00:00:00.000' and ts<'2021-09-01 00:00:00.000' group by wtcode >>E:/taosTempData/2

实验截图如下:

3次查询测试时延如下:

测试批次时延(秒)
10.040000
20.661000
30.099000
平均值0.26666

3.窗口查询操作

查询某个时间段内,按照1小时、1天、10天的时间窗口进行分组后的count,max,min,avg聚合结果;比如查询从2020-01-01 00:00:00.000 到 2020-02-01 00:00:00.000的31天内的全部数据记录,按照每1小时、1天、10天的时间区间划分后的count,max,min,avg。

数据库中对应查询语句为:

select count(*),max(col117),min(col117),avg(col117) from t_QH01 where ts >='2021-08-01 00:00:00.000' and ts<'2021-09-01 00:00:00.000' and wtcode ='001' interval (1h) >>E:/taosTempData/3;select count(*),max(col117),min(col117),avg(col117) from t_QH01 where ts >='2021-08-01 00:00:00.000' and ts<'2021-09-01 00:00:00.000' and wtcode ='001' interval (1d) >>E:/taosTempData/4; select count(*),max(col117),min(col117),avg(col117) from t_QH01 where ts >='2021-08-01 00:00:00.000' and ts<'2021-09-01 00:00:00.000' and wtcode ='001' interval (10d) >>E:/taosTempData/5;

实验截图如下:

多个批次查询测试时延如下:

测试批次时延(秒)
interval(1h)第1次查询0.107000
interval(1h)第2次查询0.060000
interval(1h)第3次查询1.072000
Interval(1h) 平均值0.413
测试批次时延(秒)
interval(1d)第1次查询0.041000
interval(1d)第2次查询0.087000
interval(1d)第3次查询1.615000
Interval(1d) 平均值0.581
测试批次时延(秒)
interval(10d)第1次查询0.072000
interval(10d)第2次查询0.026000
interval(10d)第3次查询0.020000
Interval(10d) 平均值0.03933

经过反复对比测试以及应用适配,最终我们选定TDengine作为我们数据平台的时序数据解决方案。

三.TDengine落地实践

目前中节能风电的整体时序数据流如下图所示:

风场的时序数据(主要是风机数据和电气数据)穿透网闸后,经由场站侧的采集程序采集和转发,最终所有数据会汇聚到集团侧的分布式时序数据库,前端的实时监视、指标计算均构建于其上,同时数据还要送到大数据分析平台和生产运维平台。

集团中心侧的TDengine集群起到了举足轻重的作用,既要收集所有风场的时序数据,同时还要支撑前端应用以及同步数据到其它系统。

TDengine的诸多特性中,最吸引我们的是超级表和标签功能。超级表能让同一类风机的建模、管理和计算过程更加方便快捷,而标签特性能增加诸如隶属项目、平台容量等维度特征,便于在聚合操作过程中快速筛选或者分组。基于时间窗口和状态窗口的功能也为应用构建提供了很多方便,比如功率曲线拟合过程中需要的五分钟平均风速和功率计算逻辑,以及基于风机状态的各类统计分析。

在TDengine的使用初期遇到了一些问题,主要涉及集群搭建和参数配置方面,经过和涛思数据技术团队的沟通交流,都已得到解决。

后期在数据建模和应用适配方面也走了一些弯路,尤其是数据建模方面。最开始我们使用的是最简单的单列模式,一个测点一张表,在测点数目少的情况下问题并不明显,但是随着测点数目的不断膨胀,这种方式逐渐暴露出在应用适配方面的问题;后来我们采取按照不同机型不同风场建超级表的方式建模,基本能解决我们的应用问题,但是依然有无效开关量数值过多的问题;最终我们采取将风机状态等重点开关量单列建模的方式解决了。

四.整体效果和未来展望

目前基于TDengine数据库我们构建了中节能风电运维平台,使用后数据存储优势明显,整体压缩比在7-8倍,数据查询也实现秒级响应。整体使用效果如下图所示:

未来我们考虑在每个风电场站的三区部署一个单节点TDengine,作用不只是采集和转发,还要起到时序数据质量治理以及实时模型预测的功能;而在集团侧我们会考虑基于TDengine构建更多更复杂的计算指标和高级模型;同时还要和任务调度引擎以及风电行业标准集成。未来的数据流图如下图所示:

最终将其作为中节能风电公司时序数据的核心技术组件来构建智能运维平台,为中节能风电公司3060双碳目标的提供坚实基础。

作者介绍:

潘文彪,中节能风电生产运维部数据分析师,2019年起从事节能风电的数据分析与数字化平台建设工作。

✨投稿活动到周一(1.17)就截止啦,别错过你的大奖哦✨

iPhone 13 Pro/AirPods Pro/阅读器 等你带回家!

上一篇:软件测试培训之回归测试的目的和策略
下一篇:软件测试培训之回归测试的面试题总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~