乐趣区

关于tdengine:11亿条数据压缩到12GBTDengine在陕煤矿山项目的落地实践

作者:关中旭

小 T 导读:陕西煤业股份有限公司(股票代码:601225),是陕西煤业化工集团有限责任公司煤炭资产惟一上市平台。陕煤在煤矿智能化倒退上成绩斐然,创始了首个全国智能化无人开采工作面,首个全国智能化掘进机器人。不仅是国内采煤新形式的先河,更填补了煤矿开采技术的空白。

为实现煤矿企业数字化生产治理,进步煤矿企业生产安全性、扩大煤矿企业管理手段及治理思路,陕煤开发团队思考将煤矿企业人员、车辆、设施、环境参数等各类根底数据,进行对立存储和智能剖析决策,在此背景下打造全矿井数字化平台,实现了煤矿企业井下人员、胶轮车及电机·车地位监控、井下各类设施状态监控、井下各类传感器数据监控、井下地位地点的告警剖析及事件联动。

此平台的搭建意义在于买通煤矿生产环境中各类繁多子系统之间的数据壁垒,实现各类子系统数据之间的互联互通。在实现门路上,平台底层基于规范 TCP/UDP 协定接入公司自研硬件设施,并通过定制化的协定转换模组接入其余非标的设施通信协议,将上传数据进行归集入库存储并通过大数据分析平台进行驱动剖析,最初依据业务具体情况生成数据统计与驱动后果。

一、技术选型

以地位数据为例,井下人员、车辆佩戴装置定位设施后将基于井下网络进行地位数据的实时上传,人员默认上报周期为 1 秒,车辆默认为 0.5 秒。在原有单零碎我的项目中,因为初期零碎容量较小且硬件设施上传周期较大,所以采纳了传统 SQL Server 数据库来进行轨迹数据存储。但随着后续我的项目迭代,硬件设施定位精度进步且上报周期缩短,也导致数据库存储压力增大。

为解决大数据量存储问题,咱们先是思考在数据接收端减少大量数据过滤算法,对原始数据进行预筛来缩小最终入库数量,在数据库侧则采纳减少分库分表的策略,那在数据查问端就须要对分库分表进行大量的查问语句优化。这样一来,整体我的项目不仅复杂度较高,而且后续保护类工作量微小。

在平台设计阶段,一是鉴于上述失败教训,其次咱们也思考到不论是地位数据还是传感器数据,尽管数据载体不一样,但它们都是蕴含工夫戳的序列数据,且数据存储固化后很少再有须要更新的业务场景,采纳时序数据库来存储这类数据再适合不过了。基于此,咱们开始进行选型调研,对几类时序数据库进行了综合比拟:

  • OpenTSDB
    基于 HBase 的时序数据库实现,反对集群横向扩大,然而部署及运维老本较高,且提供的查问函数较少,不适宜后续查问业务的扩大。
  • TDengine**
    早在 TDengine 开源之初咱们就对其有所关注。对一个新兴根底开源我的项目,稳定性始终是咱们掂量的重要规范,TDengine 在后续开源的 2.X 版本中不仅减少了集群模块且稳定性也大幅提高,同时其 SQL 语句与传统关系型数据库语句类似,部署及保护绝对简略,社区环境很好,也有企业单干模式。
  • InfluxDB
    InfluxDB 在开源时序库畛域长期占据 TOP1 的地位,社区比拟沉闷且生态建设也挺好。但因为集群模块没有开源,不实用公司产品的高可用要求。

综合上述几类时序数据库的优缺点,最终咱们决定采纳 TDengine 作为本我的项目根底数据的存储计划。

二、建库建表

  • 基于 TDengine 的产品架构图搭建如下:

  • 建模思路
    在定位业务时能够细分出人员、车辆等不同的定位对象,只管数据类型不同,但定位相干数据字段均统一,因而定位数据应用一张超级表进行治理即可。在 TDengine 超级表内数据类型及各个数据对象编号将作为 tag 进行辨别,在查问业务时应用超级表并关联 tag 字段进行查问。

从咱们的理论业务登程,具体建表思路如下:

三、落地成果

最终落地时我的项目采纳了 3 个节点的集群环境,定位设施采纳超级表进行治理,将数据标签及数据类型作为 tag 辨别各类定位设施。每个定位设施采纳子表存储,理论我的项目已蕴含 2 万多个定位设施。从写入性能到查问性能均大幅满足现场理论需要:总计定位数据量超过 11 亿条,数据压缩后 TDengine 数据目录占用磁盘大概 12G,整体压缩率能够达到 3 /100。

下图示例为我的项目中人员与车辆定位理论应用场景,基于 TDengine 数据库引擎,对井下的人员、车辆数量以及地位进行实时统计与展现。

四、将来布局

随着我的项目的一直推动直到施行落地,咱们也见证了 TDengine 的几次大版本更新,目前集群整体运行状况绝对稳固,性能和老本管控也达到了咱们的预期。为了帮忙 TDengine 可能实现更好地倒退,在此也为其提出几点优化倡议:

  • 目前 TDengine 在陕煤应用的监控性能还较为简单,心愿后续版本升级过程中可能优化集群环境监控相干的性能。
  • 目前我的项目在应用 JDBC 驱动时,是通过客户端连贯 TDengine 的。随着版本升级,运维工作量较高,须要同步降级服务器和客户端,且 JDBC 驱动降级的话还须要同步降级对应服务,步骤绝对繁琐,心愿在接下来的版本中能加以改善。

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

退出移动版