作者|温金雄、彭涛、周玉峰
:为了解决新能源汽车车主面临的充电效率问题,协鑫能科打造了以换电为核心业务的移动能源品牌「协鑫电港」,科学管理、合理应用和智能调度各种数据流尤为重要。本文分享了他们对数据库架构建设的思考和思考TDengine应用体验。
协鑫能源科技有限公司(证券简称协鑫能源科技有限公司)002015.SZ) 是协鑫(集团)控股有限公司旗下的企业,主要从事清洁能源运营、移动能源运营和综合能源服务。公司致力于打造便捷、经济、绿色的旅游生态系统,从清洁能源生产、能源补充服务到储能,为电动旅游提供综合能源解决方案,致力于成为领先的移动数字能源技术运营商。
1、
随着新能源汽车的广泛普及,能源补充效率问题逐渐成为大多数车主面临的痛点。为了解决这一问题,作为一家领先的新能源公司,协鑫能源科技创新突破,进入能源服务领域,打造以电力交换为核心业务的移动能源解决方案品牌「协鑫电港」。
因为这是一个新领域的新项目,想要成功,需要科学管理、合理使用和智能调度各种数据流,所以对于这个场景,我们从一开始就锁定了最大的数量级物联网数据处理方案(Time Series Database)上,重点对比了InfluxDB、OpenTSDB以及TDengine。
最终,TDengine它以其独特、科学的设计和优异的测试性能成为我们选择的时间序列数据处理引擎,承担了用户车辆数据、电池设备数据和换电港工作设备的大量数据存储和分析任务,解决了项目中最困难的环节。最后,我们决定使用它TDengine 2.4.0.10该项目在电信天翼云上落地。
从流量峰值削减和数据安全的角度来看,我们将首先使用某个MQTT先将这些不同类型的设备数据转发给新闻服务器Kafka。不同类型的数据将分别上传到不同类型Kafka topic,最后再通过Java将数据写入连接器TDengine。具体结构如下图所示:

除了整体结构TDengine,还有其他一些数据库共同支持系统服务MySQL负责存储订单、流水等需要仔细查询的关系数据,但由于MySQL可承受的数据量相对有限。为了进行一些大表的连接查询,我们访问了它TiDB,负责分析报表数据的存储。
目前接入TDengine最主要的入库数据是车辆传感器(如:车辆里程、经纬度等)以及换电站电池相关的传感器(电池的各种指标)数据。当前共有55张超级表,子表数量达到11万张。
在数据库的选择上,我们一直认为不同数据库之间有专业的行业,必须承认,TDengine独特的存储引擎设计在降低成本方面非常有效。
对于TDengine,在稳定运行几个月后,我们首先使用单节点3月完成动态扩容,发展到3节点集群模式还将数据库升级为三份(从图中可以看出)。
TDengine动态扩展非常方便,只要一些必要的参数保持一致,就可以直接通过“create dnode加入新的计算资源。加入后,再通过“alter database iot replica 3”此命令可以直接将在线命令数据库转换为3副本,从而实现数据的备份及高可用。
在查询方面,我们列出了一些常用的内容SQL,TDengine响应速度快,能完全满足我们的需求:
selectmax(pmk)-min(pmk)fromaodong_109wheresid='P42100001'andsd=0andts>'2021-12-0100:00:00'
selectlast(sv),last(st)fromaodong_112wherebn='001PB0GM000002B3L0300067';
因为我们的业务是24*7不间断运转 ,所以没有时间做版本升级。首先,我们计划抽出时间TDengine版本升级到相对较新的版本,然后做一些碎片重组压缩工作来提高查询效率。此外,我们还计划使用它Flink从TDengine中读数据做流式计算(见官方发布Flink适配TDengine的文章)。
随着业务的快速增长,TDengine集群存储的数据量会越来越大,数据需要长期保留。对于大数据量的运维TDengine这将是一个巨大的挑战。伴随数据量级的增长,备份、迁移、库、表的运维都会受到影响,也有可能遇到我们之前没有经历过的问题,这就需要TDengine集群实现升级、扩展、拆分、维护等运维操作。未来,我们希望与社区分享更多的经验,让更多的人了解TDengine。
对于TDengine我们对未来的发展也有自己的期望:
- 希望增加动态修改参数功能,减少停机维护次数。
- 实现类似慢SQL日志功能,降低高负荷,调整后分析定位,追溯故障原因。
- 进一步权衡udp好处和问题。我们经常连接错误报告Ref is not there,目前在客户端添加rpcForceTcp 1 应该是有效的。
- 提高错误报告信息的可读性,许多错误报告提示不够清楚,无法快速判断具体原因。
总之,希望TDengine以后越来越好,希望我们的合作能更上一层楼。
想了解更多 TDengine Database欢迎来到具体细节GitHub查看相关源代码。