基于NoSQL的农业数据采集任务分发系统设计与实现

2022-01-11 09:42方党豫高贤强
现代计算机 2021年32期
关键词:负责人页面流程

方党豫,高贤强

(塔里木大学信息工程学院,阿拉尔 843300)

0 引言

农业数据采集是农业研究工作开展的载体,虽然目前在智慧农业生产中,已经大量应用了温湿度传感器、pH值传感器、光照强度传感器和二氧化碳浓度传感器等传感器,并构建了感知层、网络层与应用层,实现了以上数据的精确采集与自动上传云端[1],但是农业数据采集往往具有数据繁杂、数据量大、采集地点分散等特点,传感器采集数据主要适用于精细化生产过程,具有数据辐射范围小、数据类型固定、铺设成本高等特点,对于林业资源、农业人文资源与生物资源等并不适用[2-3]。

随着智能手机的普及,为农业科研人员的数据采集方式提供了新思路。本系统基于NoSQL 数据库MongoDB,依托其特性,旨在辅助农业科研人员根据自身所需的数据库结构,在系统PC端快速构建数据采集任务,通过手机共同协作录入数据,大大降低了科研人员的工作量和劳动强度,提高了科研人员共同协作的效率。并提供了数据管理的基础功能,可导出数据为后续的科研工作做准备。

1 系统概述

1.1 系统环境

本系统使用前后端分离的开发模式,开发架构由传统的MVC 模式(Model-View-Controller)变成了MVVM(View-ViewModel-Model)模式。前后端分离的开发模式与传统模式相比,可以提升开发效率、增强代码可维护性与提升系统整体稳定性等[4]。系统前端使用Vue.js 框架快速构建用户界面,使用Element-UI 美化PC 端页面,使用Vant 美化移动端页面;数据库使用MongoDB 存储采集的农业数据,使用MySQL 存储用户信息与MongoDB 数据库的文档结构,以辅助对MongoDB的存储开发;系统后端使用Spring Boot 框架简化环境搭建与开发流程,使用MyBatis 作为对MySQL 操作的ORM 框架;使用消息队列RocketMQ 作为中间件,实现异步发送手机短信功能;使用docker 容器打包部署前后端系统,部署服务器选用阿里云服务器ECS。系统环境如表1所示。

表1 系统环境

1.2 主要开发技术介绍

1.2.1 MongoDB

MongoDB 是一个介于关系数据库和非关系数据库之间的文档数据库产品,是非关系数据库当中功能最丰富,最像关系数据库的,其具有操作起来比较简单和容易、支持丰富的查询表达式与数据存储丰富多样化等优点[5]。本系统之所以选用MongoDB 作为存储数据库,是因其支持疏松的数据结构,将关系型数据库中“行”的概念转换为“文档”,并使用Json 格式存储,无固定模式限定,可以为不同的农业数据采集任务提供个性化的字段定义,使得数据模型具备灵活多变的能力[6]。如图1 所示,直观展示了MongoDB 与传统关系型数据库的存储结构区别[7]。

图1 关系型数据库与文档数据库MongoDB存储区别

1.2.2 Vue

Vue 是时下较为流行的渐进式JavaScript 框架,其只关注视图层,采用自底向上增量开发的设计,目标是通过尽可能简单的API 实现响应的数据绑定和组合的视图组件[8]。Vue 还有丰富的UI 组件库,支持独立开发,解决当前前端应用开发组件不丰富的问题,帮助快速构建前端页面[9]。

1.2.3 Spring Boot

Spring Boot 通过简化配置来进一步简化了Spring 应用的整个搭建和开发过程,让构建Java Web 应用不再配置繁琐的xml 文件,并且其本身集成了大量的依赖,例如其集成了tomcat,可打包成jar包,开箱即用[10]。

2 系统设计

2.1 需求分析

根据使用用户类型划分,本系统将用户使用需求划分为数据采集负责人使用需求与数据采集人使用需求。总体流程为负责人根据采集的数据字段构建数据采集任务,下发给数据采集员,其根据任务需求录入采集的数据,项目负责人管理采集到的数据,并且可以导出数据进行进一步的分析。如图2 所示,展示了根据功能需求构建的系统使用流程。

图2 系统使用流程

农业数据采集任务负责人端的需求主要包括以下内容:

(1)采集任务构建。采集任务构建是整个任务采集的基础,负责人根据对采集的数据需求来自定义数据结构的字段,并可设置字段的类型与校验规则来保证数据的可靠性。

(2)数据采集人员管理。负责人可以生产数据采集人员的账户ID 与密码,录入其个人信息,并分发给数据采集人员,还可以对数据采集人员进行分组,以方便不同采集任务的下发。

(3)采集任务下发。采集任务构建完成后,负责人可以通过短信、钉钉提醒等功能,下发给数据采集人员。

(4)农业数据管理与导出。负责人可以对采集的数据进行增加、修改、删除与查询操作,并可导出xlsx、csv 等格式的文件,使用MATLAB 等专业软件进行数据分析。

农业数据采集员端的需求主要包括以下内容:

(1)数据录入。数据采集人员根据接收到的任务需求,录入自己采集到的数据,并可连续录入,并上传云端,传入MongoDB数据库。

(2)数据共享。数据采集人员可以看到其他采集人员上传的数据与采集情况,以便进行沟通交流。

2.2 总体结构设计

2.2.1 模块设计

根据对系统的需求分析,系统的总体模块设计主要包含数据采集任务负责人模块与数据采集员模块。系统模块设计如图3所示。

图3 系统模块

负责人任务构建与下发模块和数据采集员数据录入模块是整个系统的核心,这两个模块是相互联系的。负责人根据自身所需,依据采集数据字段、任务时间、采集地点等生成数据采集任务,根据事先对数据采集员的分组,选择对应的分组下发数据采集任务,并可通过任务通知功能提醒数据采集员;数据采集员接收任务后,打开手机端页面录入数据完成数据采集任务。具体流程如图4所示。

图4 采集任务构建与录入流程

2.2.2 架构设计

系统使用前后端分离开发,使用前后端分离开之后,前端通过Ajax 请求获取后端数据进行页面的渲染。采用分层开发,实现了高内聚低耦合的系统架构[11]。便于二次开发与提高系统的稳定性。系统架构如图5所示。

图5 系统架构

2.2.3 数据库设计

本系统选用NoSQL 数据库MongoDB 作为存储的数据库。但是NoSQL 不能完全替代传统的关系型数据库[12],因此本系统仍然使用MySQL 以辅助MongoDB的存储。

根据对系统的模块设计,在MySQL 中建立四张表,各表的详细信息如表2 所示。使用InnoDB为存储引擎。在sys_user 表中建立user_id 字段,将四张表关联起来。

表2 MySQL表设计

对于存储采集数据的MongoDB 数据库,其并没有预定义的数据结构,在系统使用过程中,用户根据需求动态生成数据模式,一个调查任务创建一个集合,集合中的文档信息使用JSON 格式存储。例如需要进行苹果品种的调查,则可以构建如下JSON 格式数据:{"_id":"","品种名":"","品种拉丁名":"","样本类型":"","所属树种":"","地理数据":{"海拔":"","纬度":"","经度":""},"生境信息":"","植物学信息":{"植株情况":"","植物学特征":"","果实性状":"","生物学习性":""},"品种评价":""}。

3 系统主要功能实现

完成系统模块、系统架构与数据库的设计之后,使用Vue 与Spring Boot 对系统的前后端功能进行实现。

3.1 采集任务构建与下发功能实现

农业数据采集负责人通过浏览器注册登录农业数据采集系统,打开数据采集员管理页面,添加数据采集员信息,使用AJAX 向后端API 发送post 请求,向数据库中添加数据并向使用信息服务发送给。打开任务构建页面,根据数据采集任务需求构建采集字段,将数据采集字段结构存入MySQL 中,根据需求选择下发任务的分组,通过信息服务提醒数据采集员。如图6,为该过程的时序图。

图6 任务构建下发时序图

3.2 数据录入功能实现

数据采集员通过信息服务接收到数据采集任务后,即可通过手机登录采集系统查看任务的具体内容。登录系统后,进入数据录入页时,页面将会按照存储在MySQL 中任务数据字段结构来进行渲染,录入数据后,提交到服务端,存入MongoDB 数据库中,数据采集负责人通过PC 端则可看到实时采集的数据并进行管理。图7 显示了实际的流程。

图7 数据流通流程

4 结语

本文基于NoSQL 数据库,使用Vue 与Spring Boot 构建前后端系统,对业务需求进行了充分调查与分析,对系统模块、系统架构与数据库结构、采集任务构建与下发、任务提醒,数据录入与检验等关键技术进行设计与实现,研发了农业数据采集任务分发系统。

考虑农业数据采集的实际应用场景,利用MongoDB 的特性,使用户可以根据自身需求自定义数据模型,实现对农业数据采集任务的构建、下发、录入、管理与导出。

经过实践表明,通过该系统的使用,简化了农业数据采集与数据管理的流程,极大方便了农业从业人员的工作,让农业从业人员更专注于对数据的分析与处理。本文设计的系统虽然达到了预期的目标,但是在对农业数据的管理与分析上仍有待提高。下一步准备在前端引入数据可视化组件,并支持已有数据导入合并,丰富系统功能。

猜你喜欢
负责人页面流程
工星人平台注册流程
答案
让Word同时拥有横向页和纵向页
与元英&宫胁咲良零距离 from IZ*ONE
社区银行管理思维探索与思考
国有企业负责人薪酬激励机制的问题与对策分析
四川省高考志愿填报流程简图
“一课四备”磨课流程例说
如何才能成为一个合格的医院项目管理负责人
驱动器页面文件大小的总数为何总是07