共计 2076 个字符,预计需要花费 6 分钟才能阅读完成。
作者:喻东 东莞中融数字
小 T 导读:当下我国养殖企业广泛采纳传统塑料耳标 + 人工定期剖析 + 兽医现场诊断来做家畜异样预防,尽管市面上有固定摄像头、滑轨追踪摄像头、电信 NB 卡等计划,但这种形式依旧会存在家畜辨认谬误、高提早等问题,无奈做到实时监控每一头家畜。基于此,咱们利用新兴技术打造了家畜“特色采集 +AI 剖析”的 AIoT 平台,来实现家畜异样的早发现、早报警、早预防。
具体场景如下:应用 APP 提前录入采集器编号,再将采集器固定在家畜身上(耳朵、颈部、腿部等),采集器每分钟会采集 20 次特色数据,采集数据品种包含温度、流汗状况、经纬度、静止、脉搏、环境温湿度等。将采集到的数据进行边缘计算,再将汇总后果通过 4G 网络发送至云端服务器,之后云端会依据经纬度等要求获取到所对应的天气、风量等变量,联合采集器数据,AI 会综合评估出家畜以后的衰弱状况,例如是否有食欲不振、瘫坐不动、发烧趋势等。
一、架构和具体实现
与传统物联网我的项目一样,本平台对数据的写入性能有较高的要求,同时也有肯定的聚合查问需要,具体操作上写多读少,是典型的高并发写入场景。咱们之前采纳的是 MongoDB 的计划,还做了月份分表,然而进行聚合查问的效率并不高,而且也不便当,之后咱们又尝试引入 Cassandra,但应用上仍旧不够便当。
偶尔的机会下,咱们理解到 InfluxDB 和 TDengine,在搭建测试环境后对两者别离进行了测试,最终敲定 TDengine。 除了两者间接的性能差距外,TDengine 提供的表数据 TTL 机制、数据压缩、流式计算等性能也让咱们更加青眼于它。
基于超级表的设计原理,咱们将家畜的业务关联信息作为 tag,不便关联 MySQL,同时一个采集器就作为一个子表存在,采集器测点作为子表的列。
表构造别离如下图所示:图一为家畜所佩戴的采集器表,也能够认为是家畜表,其与采集器一一绑定,图二与图三则为装置在养殖场固定地位的环境温湿度表,此外还有存储原始报文数据的表等,就不在此一一列举了。
图 1
图 2
图 3
目前我司的所有物联网数据表都是基于 TDengine 超级表设计的,针对外围的家畜超级表,其关联的 tag 会比其余表更多一些。须要留神的是,为了保障 TDengine 中 tag 与 MySQL 统一,每当业务中批改了家畜的根本属性,也须要同步执行 tag 批改操作。
这种表设计不便咱们追溯可能呈现的解决延时等问题,表中的 collect_time 为采集工夫,insert_time 为数据落盘工夫,如果两者的时间差较大,则可能就呈现了网络差、采集器故障、服务端吞吐量不够等问题,此时就须要排查下起因了。
家畜数据采集到数据落盘的全流程如下图所示,通过采集器采集到的数据通过 4G 网络上报,由设施网关初步解决数据并推送至 MQ,晋升吞吐量,之后传输给消费者,最终落盘到 TDengine。
二、数据迁徙和实际效果
因为咱们之前应用的是其余数据库,更换新的数据库时会产生数据迁徙的操作,具体迁徙步骤如下:
- 新产生的采集器数据别离写入 MongoDB 和 TDengine,即一份数据写两份,旧数据查 MongoDB,新数据查 TDengine,以便呈现问题后能及时解救;
- 逐渐将历史数据格式化导入到 TDengine;
- AI 剖析的数据源由 MySQL 数仓改为 TDengine。
在迁徙过程中咱们也遇到了一些小问题,次要有两点:
- 因为此前应用的是 MySQL+MongoDB 的计划,所有 MongoDB 的语句都得改写为 TDengine 的 SQL,而 TDengine 的语法尽管靠近 SQL,但细节局部区别却不少,不过也并不是大问题,适应之后就好了。
- 因为我司的服务比拟多,起初我有思考做一个中间件来提供给零碎内的其余服务做数据查问,但因为 TDengine 是一个较新的开源我的项目,因而最终还是应用传统的形式:波及到了物联网数据调用的服务全副自行连贯 taos,在迁徙运行稳固后再做整合。
迁徙之后的成果也非常明显,咱们在应用 MongoDB 时,自建集群是应用了 6 台 4 核 32G 机器, 迁徙到 TDengine 之后,自建集群仅应用了 2 台 8 核 32G 机器,在老本上有显著降落。
在性能的具体表现上,我模仿了 6000 多个采集器的数据,表数据共计约三亿条。我司大部分查问都是基于子表,仅局部业务须要查看聚合操作。对超级表做 group by+last_row() 查问时,能在 1.5s 内返回数据,对子表做查问在 0.1 秒左右(select from son_table limit 10),能够满足业务要求。
三、写在最初
随着物联网、人工智能等新兴科技的倒退,AIot 曾经是个不可漠视的大趋势,而计算环节往往少不了数仓,但在需要不简单的产品中或者能够节俭掉这一步,某种意义上,TDengine 提供的流式计算和高性能的查问,也帮忙咱们在肯定水平上省掉了不少两头步骤,达到了降本增效的后果。
当初 TDengine 在老本管控和性能晋升方面所带来的成果曾经很突出,如果其可能在将来某个版本反对与模型之间的调用并间接输入后果,那可就太完满了!
✨想理解更多 TDengine 的具体细节,欢送大家在 GitHub 上查看相干源代码。✨