• 10倍性能优势!TDengine在云洋物联智慧农业业务中替代MongoDB


    作者介绍

    叶红伟,北京云洋物联技术有限公司软件研发经理,主要从事智慧农业平台开发及应用,负责平台的架构设计以及主要业务代码开发工作。

    关于云洋物联

    作为国内领先的数字农业产品与解决方案服务商,云洋物联自成立以来便始终致力于推动三农新基建的发展,以数据赋能农业建设,以科技振兴乡村作为使命初心,加速农业农村的转型升级。同时,科学运用互联网、物联网、大数据、区块链等新兴技术,将AloT技术与农业生产技术深度融合,在政策与科技的融汇交集、叠加备力下,助力行业企业实现降本增效、提质增收。 业务快速发展之余,云洋物联不可避免地也遇到了一些棘手的难题,如元数据的存储模式导致空间占用率加速膨胀,查询分析操作响应时间达不到要求,系统复杂度越来越高等等。

    在此背景下,云洋物联决定采用时序数据库,并经过一系列测试和对比分析后得出选型结论——基于全表和单个设备进行统计查询,TDenging对比MongoDB分别快了3倍、10倍。于是,云洋物联决定将系统从原有架构迁移到TDengine。

    业务架构详解

    云洋物联智慧农业平台是一家基于农业物联网设备和AI种植模型,为温室大棚、大田提供标准化智能种植方案的技术服务商。在实际生产种植环境中,云洋物联以每个大棚、大田为基准点,根据作物的不同茬口及生育期,匹配出适宜作物生长的环境参数,并以此建立合适的智能种植方案。 具体而言,云洋系统会通过物联网采集设备实时上报的数据,判断棚内环境是否适宜种植作物生长。当棚内环境触发设备设置对应阈值时,关联状态下的手机等电子设备将会启动告警通知,或触发控制设备的自动控制开关。此外,通过模型算法还能计算出大棚、大田积温情况,利用空气温度、湿度等环境要素来预测是否会触发虫害、病害等危害。

     
    This image has an empty alt attribute; its file name is 1-1-1024x488.png

    图1 云洋系统的运营监控大屏,图2为云洋系统的业务架构图,其中最下层设备层为边缘硬件设备,通过设备数据分发网关对设备实时数据进行定向分发。

    业务架构中几个重要模板的分工为:

    • 设备控制服务负责下发设备控制及响应、设备运维处理、设备远程升级、日志读取等功能;
    • 设备数据分析告警按照定义的规则对实时数据进行分析告警;
    • 设备存储服务负责对设备数据进行解析入库,提供设备数据查询功能;
    • 业务层则是对实际业务的抽象,结合用户园区地块及绑定的物联网设备、设备产生的数据,结合标准化种植模型进行方案推荐及病害虫害的预测。
     
    This image has an empty alt attribute; its file name is 2-1.png

    元数据存储模式导致数据表空间占用率膨胀十几倍

    众所周知,农业物联网设备主要分为环境数据采集与控制两大类。其中环境数据采集型设备,细分的话又有各类单品传感器、多合一传感器和气象站等,而这些设备采集环境要素指标往往也具有多样性。

    下图为不同设备的采集信息情况:

     
    This image has an empty alt attribute; its file name is 3.jpg
     
     
     
    This image has an empty alt attribute; its file name is 4.jpg
     
     
     
    This image has an empty alt attribute; its file name is 5.jpg

    发展至今,平台上在线设备已经有一万多台,设备每日上报的数据量达到上百万条。 这些数据基于MySQL、Redis、MongoDB实现多级存储 ,而在设备采集参数的不确定性问题上,我们采用基于元数据的范式,增加对设备统一集中管理配置的灵活性。

    但元数据的设计存储模式在灵活便捷之余,也存在一些缺陷。举例来说,如果我们将5个采集要素的设备数据进行存储,则会生成5条数据,对比单表存储数据量膨胀了5倍。此时针对一些客户的需求,比如给潮州佳宝产业园定制的导管式土壤监测站,有十几个环境要素,基于上述的存储模式,表空间占用率将膨胀达十几倍。

    除此之外,因为使用的是传统数据库,所有设备数据都是存储在一张表上。在这种存储情况下,为了满足实时性查询的需求,对最新数据采用Redis进行存储;为了满足周期数据的范围查询,全量的历史数据则通过MongoDB按时间线分表存储,时段内变动的数据则存储在MySQL。

    设备历史数据查询:

    This image has an empty alt attribute; its file name is 6-1-1024x473.png

    地块环境走势曲线:

    This image has an empty alt attribute; its file name is 7-1-1024x391.png
     

    随着业务功能的丰富细化及设备量的日益增加,对设备数据的实时查询、时间范围分析的需求增加,基于MySQL和Mongo DB进行查询分析操作响应时间较长,系统复杂度也逐渐增高。为了满足对设备数据高效的查询分析,我们准备将设备数据存储切换到时序数据库。

    为什么选择 TDengine?

    在实际的业务中,对一段时间内的数据进行分析是系统中很常见的一个操作。我们在MongoDB(对时间和设备编码建立了索引)和TDengine上都存储了3000万条数据,首先对全表进行时间区间数据分组统计查询,两种数据库的查询结果显示如下:

    MongoDB:

     

    TDengine:

    This image has an empty alt attribute; its file name is 9.png

    通过对比,基于全表进行时间区间数据分组统计查询,TDengine比MongoDB快了3倍。

    接下来对单个设备进行数据分组统计查询操作,两种数据库的查询结果如下图所示:

    MongoDB:

     

    TDengine:

     

    基于单个设备数据的查询统计,MongoDB是非本地查询,存在一定的网络开销,响应速度在1秒以内,而TDengine对比MongoDB快了10倍以上。

     

    通过上述的测试和应用实践,我们发现TDengine具有诸多优势特点,下面简要列举一下选择它的五个理由:

    • 数据模型:对比传统数据库,TDengine采用一个采集点一张表,动态静态数据分离模式,对同一类型的采集点采用超级表进行数据统一查询管理的设计
    • 窗口查询:对比MongoDB、MySQL进行时间范围的函数操作,响应速度快了一个级别
    • 支持标准SQL: 使用简单,学习成本低
    • 标签查询:基于给表定义标签,可以方便地查询统计分组设备
    • 运维简单:数据库的安装、副本扩容,通过简单的配置即可完成

    未来展望 

    这是一个非常惊喜的开始,云洋物联和TDengine的合作不止于此。未来我们将结合业务需求,在更多场景下应用TDengine进行数据存储,同时对TDengnie的消息队列、缓存、流式计算等功能进行学习应用。

    此外,在调研和使用的落地过程中,也非常感谢涛思数据提供的专业性指导和建议,祝TDengine越来越好。

     
     
  • 相关阅读:
    [C++11新特性] weak_ptr和unique_ptr
    [C++11新特性] shared_ptr共享的智能指针
    VS2019 Qt5.15.2 开发环境搭建
    【C++11 新特性】Lambda表达式(三)
    【C++11 新特性】bind(二)
    【C++11 新特性】function(一)
    【IPC 进程间通信】有名管道的简单实现
    【IPC 进程间通信】常用进程间通信方式总结
    Qt 文件常见操作管理类
    【GitHub 开源分享】QML 在线预览工具
  • 原文地址:https://www.cnblogs.com/taosdata/p/15325262.html
Copyright © 2020-2023  润新知