作者介绍
叶红伟,北京云洋物联技术有限公司软件研发经理,主要从事智慧农业平台开发及应用,负责平台的架构设计以及主要业务代码开发工作。
关于云洋物联
作为国内领先的数字农业产品与解决方案服务商,云洋物联自成立以来便始终致力于推动三农新基建的发展,以数据赋能农业建设,以科技振兴乡村作为使命初心,加速农业农村的转型升级。同时,科学运用互联网、物联网、大数据、区块链等新兴技术,将AloT技术与农业生产技术深度融合,在政策与科技的融汇交集、叠加备力下,助力行业企业实现降本增效、提质增收。 业务快速发展之余,云洋物联不可避免地也遇到了一些棘手的难题,如元数据的存储模式导致空间占用率加速膨胀,查询分析操作响应时间达不到要求,系统复杂度越来越高等等。
在此背景下,云洋物联决定采用时序数据库,并经过一系列测试和对比分析后得出选型结论——基于全表和单个设备进行统计查询,TDenging对比MongoDB分别快了3倍、10倍。于是,云洋物联决定将系统从原有架构迁移到TDengine。
业务架构详解
云洋物联智慧农业平台是一家基于农业物联网设备和AI种植模型,为温室大棚、大田提供标准化智能种植方案的技术服务商。在实际生产种植环境中,云洋物联以每个大棚、大田为基准点,根据作物的不同茬口及生育期,匹配出适宜作物生长的环境参数,并以此建立合适的智能种植方案。 具体而言,云洋系统会通过物联网采集设备实时上报的数据,判断棚内环境是否适宜种植作物生长。当棚内环境触发设备设置对应阈值时,关联状态下的手机等电子设备将会启动告警通知,或触发控制设备的自动控制开关。此外,通过模型算法还能计算出大棚、大田积温情况,利用空气温度、湿度等环境要素来预测是否会触发虫害、病害等危害。
图1 云洋系统的运营监控大屏,图2为云洋系统的业务架构图,其中最下层设备层为边缘硬件设备,通过设备数据分发网关对设备实时数据进行定向分发。
业务架构中几个重要模板的分工为:
- 设备控制服务负责下发设备控制及响应、设备运维处理、设备远程升级、日志读取等功能;
- 设备数据分析告警按照定义的规则对实时数据进行分析告警;
- 设备存储服务负责对设备数据进行解析入库,提供设备数据查询功能;
- 业务层则是对实际业务的抽象,结合用户园区地块及绑定的物联网设备、设备产生的数据,结合标准化种植模型进行方案推荐及病害虫害的预测。
元数据存储模式导致数据表空间占用率膨胀十几倍
众所周知,农业物联网设备主要分为环境数据采集与控制两大类。其中环境数据采集型设备,细分的话又有各类单品传感器、多合一传感器和气象站等,而这些设备采集环境要素指标往往也具有多样性。
下图为不同设备的采集信息情况:
发展至今,平台上在线设备已经有一万多台,设备每日上报的数据量达到上百万条。 这些数据基于MySQL、Redis、MongoDB实现多级存储 ,而在设备采集参数的不确定性问题上,我们采用基于元数据的范式,增加对设备统一集中管理配置的灵活性。
但元数据的设计存储模式在灵活便捷之余,也存在一些缺陷。举例来说,如果我们将5个采集要素的设备数据进行存储,则会生成5条数据,对比单表存储数据量膨胀了5倍。此时针对一些客户的需求,比如给潮州佳宝产业园定制的导管式土壤监测站,有十几个环境要素,基于上述的存储模式,表空间占用率将膨胀达十几倍。
除此之外,因为使用的是传统数据库,所有设备数据都是存储在一张表上。在这种存储情况下,为了满足实时性查询的需求,对最新数据采用Redis进行存储;为了满足周期数据的范围查询,全量的历史数据则通过MongoDB按时间线分表存储,时段内变动的数据则存储在MySQL。
设备历史数据查询:
地块环境走势曲线:
随着业务功能的丰富细化及设备量的日益增加,对设备数据的实时查询、时间范围分析的需求增加,基于MySQL和Mongo DB进行查询分析操作响应时间较长,系统复杂度也逐渐增高。为了满足对设备数据高效的查询分析,我们准备将设备数据存储切换到时序数据库。
为什么选择 TDengine?
在实际的业务中,对一段时间内的数据进行分析是系统中很常见的一个操作。我们在MongoDB(对时间和设备编码建立了索引)和TDengine上都存储了3000万条数据,首先对全表进行时间区间数据分组统计查询,两种数据库的查询结果显示如下:
MongoDB:
TDengine:
通过对比,基于全表进行时间区间数据分组统计查询,TDengine比MongoDB快了3倍。
接下来对单个设备进行数据分组统计查询操作,两种数据库的查询结果如下图所示:
MongoDB:
TDengine:
基于单个设备数据的查询统计,MongoDB是非本地查询,存在一定的网络开销,响应速度在1秒以内,而TDengine对比MongoDB快了10倍以上。
通过上述的测试和应用实践,我们发现TDengine具有诸多优势特点,下面简要列举一下选择它的五个理由:
- 数据模型:对比传统数据库,TDengine采用一个采集点一张表,动态静态数据分离模式,对同一类型的采集点采用超级表进行数据统一查询管理的设计
- 窗口查询:对比MongoDB、MySQL进行时间范围的函数操作,响应速度快了一个级别
- 支持标准SQL: 使用简单,学习成本低
- 标签查询:基于给表定义标签,可以方便地查询统计分组设备
- 运维简单:数据库的安装、副本扩容,通过简单的配置即可完成
未来展望
这是一个非常惊喜的开始,云洋物联和TDengine的合作不止于此。未来我们将结合业务需求,在更多场景下应用TDengine进行数据存储,同时对TDengnie的消息队列、缓存、流式计算等功能进行学习应用。
此外,在调研和使用的落地过程中,也非常感谢涛思数据提供的专业性指导和建议,祝TDengine越来越好。