共计 3871 个字符,预计需要花费 10 分钟才能阅读完成。
作者:惠州工业互联网研究院
小 T 导读:惠州市新一代工业互联网翻新研究院(以下简称研究院)成立于 2018 年 6 月,是以部省联动施行国家重点研发打算“宽带通信和新型网络”重点专项为契机,在广东省科技厅和惠州市政府的反对下成立,立足惠州、面向广东、辐射全国、联动国内的工业互联网省级科技翻新平台。
为实现宿舍用电的智能化治理、保障学生用电的独立性和安全性,针对学校宿舍用电的免费,研究院打造的智慧用电管控零碎采纳一室一表一爱护的计划,为学生宿舍配置智能电能计量表计和用电爱护设施,对每个用户的用电进行独立计量和爱护。
这套零碎通过互联网采集所有终端的数据,再由通讯网关将数据通过无线组成的专用网络或局域网将数据传输至远程管理计算机。系统管理软件再对数据进行存储、解决,造成学校后勤管理方须要的图形、文字等模式的文件,以此实现整个学生宿舍用电的智能化治理。
在整个零碎的构建中,令咱们比拟头疼的是对于数据库的抉择,这套用电零碎会产生大量的时序数据,在达成根底的存储、压缩和查问性能需要外,还须要均衡搭建、学习和保护等各种老本。基于此,咱们开始进行数据库选型,以期找到最适宜该用电管控零碎的数据库产品。
从零碎架构进行数据库选型
智慧用电管控零碎采纳工业互联网平台典型的端网边云零碎架构,通过物联零碎及网关解耦设施与利用平台,减速数据的聚合与凋谢,服务于智慧校园平安用电、用电缴费等场景,同时可反对智慧校园其余我的项目疾速接入须要。下图为具体的架构示意图:
为了找到适合的数据库产品,咱们先对整个零碎架构进行了剖析。
在整体架构中,该数据库的数据须要作为基础设施的数据存储,通过校园网络提供包含物联零碎在内的如下数据输入:
- 工业通信终端:高性能通信网关能同时接入多台水电气表及智慧爱护开关,反对多种工业协定,能同时解析不同类型设施数据,并能按自设置的上报频率上报数据到物联零碎服务器。
- 物联零碎:包含设施模型治理、设施治理、项目管理、历史音讯治理、规定引擎等性能,能接入任意物联网类型设施,可反对智慧校园其余我的项目疾速接入须要。
- 用电零碎:实时监测、抄表零碎、免费利用、能耗监测、平安治理、系统管理,所有宿舍能够按小时 / 天 / 月 / 季 / 年颗粒度查问用电量,电表电闸实时读数和开关状态查问,告警查问,宿管分权分域治理。
- 免费零碎:实现学校公寓宿舍治理,依据校园阶梯计费的要求,实现学生阶梯计费拆帐算法,生成的帐单由校园宿舍管理人员确认后公布到免费零碎进行查问并缴费,学生缴费后生成缴费历史清单。
- 大屏展现、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 上查看相干源代码哦。✨