压缩比达到 7:1,TDengine 助力校园智慧用电系统降本增效

2021年11月24日 阅读数:4
这篇文章主要向大家介绍压缩比达到 7:1,TDengine 助力校园智慧用电系统降本增效,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

做者:惠州工业互联网研究院git

小 T 导读:惠州市新一代工业互联网创新研究院(如下简称研究院)成立于 2018 年 6 月,是以部省联动实施国家重点研发计划“宽带通讯和新型网络”重点专项为契机,在广东省科技厅和惠州市政府的支持下成立,立足惠州、面向广东、辐射全国、联动国际的工业互联网省级科技创新平台。github

为实现宿舍用电的智能化管理、保证学生用电的独立性和安全性,针对学校宿舍用电的收费,研究院打造的智慧用电管控系统采用一室一表一保护的方案,为学生宿舍配置智能电能计量表计和用电保护设备,对每一个用户的用电进行独立计量和保护。算法

这套系统经过互联网采集全部终端的数据,再由通信网关将数据经过无线组成的专用网络或局域网将数据传输至远程管理计算机。系统管理软件再对数据进行存储、处理,造成学校后勤管理方须要的图形、文字等形式的文件,以此实现整个学生宿舍用电的智能化管理。数据库

在整个系统的构建中,令咱们比较头疼的是关于数据库的选择,这套用电系统会产生大量的时序数据,在达成基础的存储、压缩和查询功能需求外,还须要平衡搭建、学习和维护等各类成本。基于此,咱们开始进行数据库选型,以期找到最适合该用电管控系统的数据库产品。安全

从系统架构进行数据库选型

智慧用电管控系统采用工业互联网平台典型的端网边云系统架构,经过物联系统及网关解耦设备与应用平台,加速数据的聚合与开放,服务于智慧校园安全用电、用电缴费等场景,同时可支持智慧校园其余项目快速接入须要。下图为具体的架构示意图:服务器

为了找到合适的数据库产品,咱们先对整个系统架构进行了分析。网络

在总体架构中,该数据库的数据须要做为基础设施的数据存储,经过校园网络提供包括物联系统在内的以下数据输出:架构

  • 工业通讯终端:高性能通讯网关能同时接入多台水电气表及智慧保护开关,支持多种工业协议,能同时解析不一样类型设备数据,并能按自设置的上报频率上报数据到物联系统服务器。
  • 物联系统:包括设备模型管理、设备管理、项目管理、历史消息管理、规则引擎等功能,能接入任意物联网类型设备,可支持智慧校园其余项目快速接入须要。
  • 用电系统:实时监测、抄表系统、收费应用、能耗监测、安全管理、系统管理,全部宿舍能够按小时/天/月/季/年颗粒度查询用电量,电表电闸实时读数和开关状态查询,告警查询,宿管分权分域管理。
  • 收费系统:实现学校公寓宿舍管理,根据校园阶梯计费的要求,实现学生阶梯计费拆账算法,生成的账单由校园宿舍管理人员确认后发布到收费系统进行查询并缴费,学生缴费后生成缴费历史清单。
  • 大屏展现、Web 门户:经过数字大屏、Web 门户中的 Dashboard 面板,直观形象的进行数据展现。

这一整套系统产生的数据量之庞大可见一斑,除了存储外,各类查询操做也十分考验性能优劣,还须要可以快速接入其余项目。通过对各类数据库进行分析后,TDengine 这款时序数据库产品浮如今咱们眼前,它的不少特性很是符合咱们总体架构的设计初衷,也可以完美匹配系统的数据处理需求:并发

  • 多样化的数据写入支持。 校园网复杂的系统环境和网络环境提升了数据写入的多样性要求,TDengine 支持多种接口写入数据,包括 SQL、Prometheus、Telegraf、collectd、StatsD、EMQ MQTT Broker、HiveMQ Broker、CSV 文件等,不只帮助咱们实现了工业终端层的数据写入,并且部分其余系统的集成数据也得以用更低的成本进行了实施。
  • 较低的学习成本。 咱们的研发团队是作智慧校园系统的,得益于 TDengine 运维方便、支持 SQL 等特性,整个团队仅用很低的安装、运维、使用方面的学习成本就完成了基于 TDengine 系统实施。
  • TDengine 在整个构架最核心的时序场景的数据读写和压缩率方面,表现优异。 智慧校园的工业物联设备的数据写入量,不论在种类、数据点、并发数量方面都有极高的要求,并且在大量数据的状况下,写入数据的压缩率也很是影响存储的成本。TDengine 知足了 3 万条/秒的写入速度,而且压缩率达到了惊人的 1/7 左右。
  • TDengine 毫秒级别的数据查询、基于时间轴的滑动窗口聚合计算等特性,以及查询结果与 Grafana、BI 插件等快捷便利地集成,为最终的数据可视化提供了很好的支持。 以上几点缘由,让咱们坚决地选择了 TDengine 做为智慧用电管控系统的数据库产品,并开始实施搭建。

基于 TDengine 的建库、建表思路

做为一个专门为物联网结构化数据流设计的时序数据库,TDengine 的建库、建表思路与关系型数据库彻底不一样,其遵循一个数据流隔离的原则。负载均衡

物联网设备产生的数据是按照时间顺序产生的数据流,在校园智慧用电管控系统系统,咱们高频收集宿舍用电数据,一是用来统计每小时宿舍用电状况,二是用来判断宿舍大功率使用状况,及时发出大功率电器使用报警。

这种背景下,用诸如 SQL Server 的关系型数据库来存储时序数据时,作法一般是将全部同类设备的数据都建到同一张表中,每条记录会包含设备 ID、数据采集(或入库)时间戳、采集到的值,并按照时间范围来分表提速。这种作法的弊端在于查询麻烦且低效,从关系型数据库中查询某一个设备的数据时,还须要经过设备 ID 把其余设备的数据从大表中过滤掉,且每查询一个设备,就要面临过滤其余设备数据的开销。

与关系型数据库不一样,TDengine 的设计思路是一个数据源(设备)一张表,每一个数据源按照时间顺序产生的消息流能够流入一个表中,不与其余数据流混合。表的主键是数据记录采集或入库的时间戳,其余字段是采集的值。这样在 TDengine 中查询某个设备的指定时间段数据时,查询就简化为找到该设备的表并按照主键(时间戳)过滤搜索数据记录,效率大幅提高。

此外,在 TDengine 中,咱们为了方便管理设备,对不一样设备模型建立了不一样的超级表,好比电表模型是一个超级表,智能保护开关是另外一个超级表。

具体到咱们的场景中,建库、建表思路以下:

  • 超级表

超级表的结构很是简单,采集字段就是时间戳 ts 和采集值 val。但此处定义了两个标签,用于描述具体的点位静态信息。

  • 普通表

搭载 TDengine 的效果和优点

上文中咱们讲解了数据库选型思路和基于 TDengine 建库、建表的思路,那具体 TDengine 的表现如何呢?下面为你们一一揭秘。

  • 高写入速度

如今咱们服务器接入的设备数是 4000 多个,包括 2000 多台电表和 2000 台智能保护开关,每台电表以每分钟频率采集一次数据,包括电流、电压、电能、有功功率、无功功率等 7 个测点,每台保护开关一样也以每分钟频率采集一次数据,包括智能开关状态、最近故障、最近故障值、当前故障状态、当前电压值、当前电流值、当前漏电电流值、过流次数、过压次数、漏电次数等 10 个测点。

目前系统总共有 4000 多张设备表,每张表天天新增 1440 条数据 13000 个测点,一天新增大约 500 多万条数据 4000 万个测点,因而可知 TDengine 的写入性能之高。

此外,使用 TDengine 带来的最大好处是不用再考虑 SQLServer 中的分库分表操做,即便数据不断写入一年,查询时延也不会增长。

  • 低内存、高压缩比

在使用中,咱们发现 TDengine 在处理 4000 多个设备、百万量级的数据量的写入任务时,内存开销只有 1.5GB,进行查询时,内存增加也不会有明显提高。在数据落盘后,咱们查看了 var/lib/taos 下的数据文件大小,原来 5GB 的原始数据,经 TDengine 压缩后只有 80MB,压缩比为 1.6%。

  • 双机备份

TDengine 还采用集群方案作了双机备份,具体的方案是两数据节点、两数据副本的集群方式。这一集群方式,不只在运维底层实现了数据的备份,伴随着对 TDengine 功能的进一步深刻使用,其去中心的多数据节点集群开始做用,使得应用能够对全部节点进行写入和读取,从而得以有效利用服务端的资源,以数据层提供的高效读写速度有效提高整个系统的响应时间。

在刚开始使用 TDengine 时,其尚未双机热备份,以集群方式在两台主机上使用时出现了一些问题,在和涛思数据的小伙伴充分沟通后,咱们经过“充分发挥底层数据库的功能,再进一步优化平台的系统架构”的方式成功解决了此问题。

以后在 TDengine 双节点集群方案出炉后,整个系统在不少方面都获益匪浅:

  • 对于在校园网环境服务的整个构架中运做的应用来讲,不停机的数据节点扩展保证了稳定的服务。
  • 实现了便利的服务能力扩容。服务能力从原来的一台数据节点硬件资源支撑能力,线性增加为 2 台节点的硬件资源支撑能力。
  • 稳定可靠的数据备份。数据节点自动对数据副本进行备份,不只从运维角度上轻松实现了多节点数据备份的效果,并且并无对原有节点的运行效率有任何影响。
  • 两节点去中心化集群,提供了数据层两节点写入和读取的支撑能力扩展。

值得一提的是,在 TDengine 此次单节点升级双机热备集群的过程当中,经过监控能够看到,对于数据节点增长、减小或者离线时的负载机制,TDengine 底层稳定地将计算负载均衡到两个节点之上,这也为往后随着接入点和应用的增多而继续扩充 TDengine 节点提供了保障。

写在最后

咱们的系统在采用 TDengine 后不只节省了其余方案搭建集群的费用,并且在写入速度和查询性能方面彻底知足了业务的需求。做为一款为物联网场景设计的时序数据库,在多设备、采集频率高的业务形态下,TDengine 展示出了高性能、架构简单的优点,其超级表的设计也省去了不少联表查询逻辑,极大简化了业务层的开发工做。


✨想了解更多TDengine的具体细节,欢迎你们在GitHub上查看相关源代码哦。✨