客户案例|MemFire Cloud助推应急管理业务,打造百万级数据可视化大屏

news2024/12/22 20:03:13

「导语」
硬石科技,成立于2018年,总部位于武汉,是一家专注于应急管理行业和物联感知预警算法模型的技术核心的物联网产品和解决方案提供商。硬石科技作为一家高新技术企业,持有6项发明专利,拥有100余项各类平台认证和资质,荣获国家级及省市级荣誉共计13项,受到应急主管部门的高度认可。多年来,硬石科技致力于为应急管理业务提供优质服务,并取得了显著成就。

硬石科技专业致力于应急管理行业,提供以物联网技术和感知预警算法模型为核心的先进产品和解决方案。应急管理行业的业务非常繁多和复杂,很多时候都需要在短时间内交付出稳定高效的业务系统。譬如下图某市的应急综合指挥大屏,这款大屏集成了先进的物联网技术和感知预警算法模型,为应急管理部门提供了强大的工具和支持。通过实时监测和分析数据,应急隐患排查大屏能够帮助应急主管部门在事前、事中和事后快速响应和处理突发事件。

在这里插入图片描述
通过之前对MemFire Cloud基本了解,它的一些特性比如自动生成API接口、云存储等功能正是本次需求所需要的。综合考量下,我们决定使用MemFire Cloud来开发此次的应急大屏。

那么,这样一套大屏具体是如何使用MemFire Cloud开发的呢?在开发过程中又会遇到哪些挑战呢?

应急综合指挥大屏带来的三大挑战

1.大量不同维度的隐患数据需要进行统计分析,需要开发各种api接口
隐患数据来源于不同维度的数据采集,包括各个行业领域的数据(几十个领域)、乡镇层面的社区数据,以及不同级别和来源的隐患数据等。为了满足前端的多样化数据展示需求,需要开发大量的API接口来提供各个维度的数据。

2.多样性展示需求、数据关联性复杂,实现各种统计分析
由于隐患数据的多样性和与之相关联的多个数据表,表与表之间存在较强的数据关联性。因此,特定场景下需要进行复杂的统计分析才能获得所需的数据。

3.存储并检索海量的非结构化的隐患数据
隐患大屏需要存储海量的隐患数据的素材,包括图片、视频和附件。这种情况下,需要具备强大的存储和管理大数据的能力,以确保能够有效地存储和检索这些数据的素材。

面对挑战,MemFire Cloud如何破局

那么面对应急综合指挥大屏带来的三大挑战,MemFire Cloud如何一一攻克?

首先,针对大量不同维度的数据需要开发各种API接口的挑战。在项目过程中,根据业务需求我们需要根据时间周期、隐患等级、处置状态、行业领域和行政区划等多个不同的维度来统计和分析,整个过程中需要开发接近30个api接口。采用MemFire Cloud自动生成REST接口,大约一天的工作量就可以获得所有的接口。中途遇到两次需求变更的情况,我们也无需重新编写接口和前后端联调,只需要根据自动生成的API接口返回数据进行一些数据结构的调整即可。这样的优化方案极大地简化了开发流程,提高了开发效率,并确保了应对需求变更的灵活性。

接着,面对多样性展示需求、数据关联性复杂,实现各种统计分析的挑战。在我们开发过程中遇到一些困难,例如在数据表之间没有建立外键关联的情况下如何进行多表关联查询。比如像这样的需求场景:

现在需要查询当前区县下的所有乡镇的数据,乡镇的顺序必须根据表yj_countryside_infocountryside_type = '1'后的乡镇的顺序。但是乡镇的数据又在表sys_dept里,为何不直接使用yj_countryside_info表呢?这是因为yj_countryside_info表里是一个数据字典,里面有很多测试乡镇,它并不能代表当前区县的所有乡镇。在这种情况下,我们遇到的问题就是:

「当需要查询一个数据表的数据时,这个数据表的过滤是依赖于另外一张表的某些数据或某个字段时,但是这两张表又未建立关联关系,传统的sql脚本是可以通过左关联查询到的,但是在使用MemFire Cloud目前api是无法做到的。」

我们请教了MemFire Cloud相关的技术人员,他们耐心的解答并给出了三种解决方案。

a. 创建视图

「优点」:视图可以根据特定的业务需求和查询条件,对数据进行过滤、排序、聚合等操作,从而简化了对数据的操作。使用视图可以将复杂的查询逻辑封装到一个视图中,使得用户可以通过简单的查询语句获取所需的数据。

「缺点」:它们可能会影响性能,因为它们需要消耗额外的资源;它们可能不能够提供最新的数据。

b.使用数据库函数

原理就是写一个可以统计数据并且返回统计数据的sql脚本的方法跑在数据库,然后通过MemFire Cloud的rpc数据库方法在前端调用该函数。

例如:

get_sub_dept就是我们定义的数据库函数

CREATE OR REPLACE FUNCTION get_sub_dept(my_dept_id varchar)
RETURNS TABLE (sub_dept_id VARCHAR)
AS $$
BEGIN
    RETURN QUERY select  dept_id from sys_dept d where my_dept_id = any (string_to_array(d.ancestors, ','));
END;
$$ LANGUAGE plpgsql;

在前端调用此方法

const { data, error } = await supabase.rpc('get_sub_dept', { my_dept_id: '1111' })

「缺点」:对前端人员对数据库知识和设计有一定的要求,存在数据库里面的代码,不好维护。

c.子查询

熟悉业务和熟悉数据表的设计的同时和条件允许下,看是否可以通过子查询方式过滤数据。

例如sql脚本:

SELECT
        sd.dept_id,
        sd.dept_name 
FROM
        sys_dept sd 
WHERE
        sd.del_flag = '0' 
        AND sd.dept_id IN ( SELECT yci.dept_id FROM yj_countryside_info yci WHERE yci.countryside_type = '1' ) 
ORDER BY
        sd.order_num

转换为api查询:

const xz_list = await supabase
  .from('yj_countryside_info')
  .select('dept_id').eq('countryside_type', '1')
if (xz_list && xz_list.data.length > 0) {
  const xz_array = xz_list.data.map(item => item.dept_id);
  const { data, error } = await supabase
    .from('sys_dept')
    .select('dept_id,dept_name').eq('del_flag', '0').order("order_num", { ascending: true }).in('dept_id', xz_array)
}

经过综合考虑,我们选择了方案C来解决这个问题。我们发现方案C相对于方案A和方案B,在后期的维护成本方面有很大的降低。

最后,面对存储海量隐患相关的图片、视频和附件的挑战。我们借助MemFire Cloud云存储具备强大的存储和管理大数据的能力,创建了存储桶来统一存储海量素材,并使用REST接口及SDK快速实现了文件上传、下载和访问等功能的开发,满足了项目的需求。

总结

通过借助MemFire Cloud的强大能力,项目开发周期由原来的一个月缩短到现在的两周,投入人力由原来的两个减少为一个。这使得开发变得更加高效和简化,抗住了三大数据的挑战,完全不用担心底层数据的问题,保证了数据大屏快速稳定的上线,缩减了时间与人力成本。

使用MemFire Cloud,我们可以专注于前端开发工作,而无需担心后端的搭建和维护,也不需要开发接口,前端只需要关注页面的样式和功能交互。这种快速开发和节约成本的方法,能够更好地实现应急大屏的开发需求。

当然,在使用MemFire Cloud的时候也遇到了一些在使用文档上的不便,比如花费了很长时间才找到自己想要的文档内容。也希望平台能够对此关注起来哈!总体来说,我们对使用MemFire Cloud的开发海量数据大屏的体验还是感到非常惊喜的!也希望MemFire Cloud能够越来越强大!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/950427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx+tomcat部署的项目,上传文件成功,但请求文件报403 forbidden

这是因为上传文件时tomcat创建的目录、文件,nginx没有权限访问导致。 最快的解决方法是修改$tomcat_home/bin/catalina.sh 修改之后记得重启tocmat 参考: https://www.cnblogs.com/mgds/p/16129039.html

解读未知:文本识别算法的突破与实际应用

解读未知:文本识别算法的突破与实际应用 1.文本识别算法理论 背景介绍 文本识别是OCR(Optical Character Recognition)的一个子任务,其任务为识别一个固定区域的的文本内容。在OCR的两阶段方法里,它接在文本检测后面…

攻防世界-Erik-Baleog-and-Olaf

原题 解题思路 文件名就说了stego,改成图片后缀再用stegslove打开。 扫码即可

十二、集合(3)

本章概要 迭代器 Iterators ListIterator 链表 LinkedList堆栈 Stack 迭代器Iterators 在任何集合中,都必须有某种方式可以插入元素并再次获取它们。毕竟,保存事物是集合最基本的工作。对于 List , add() 是插入元素的一种方式&#xff0c…

【sgTransfer】自定义组件:带有翻页、页码、分页器的穿梭框组件,支持大批量数据的穿梭显示。

特性&#xff1a; 表格宽度可以自定义翻页器显示控件可以自定义列配置项可以设置显示字段列名称、宽度、字段名可以配置搜索框提示文本&#xff0c;支持搜索过滤穿梭框顶部标题可以自定义左右箭头按钮文本可以设置 sgTransfer源码 <template><div :class"$opti…

渲染如何做到超强渲染?MAX插件CG MAGIC中的渲染功能!

渲染工作应该算是设计师的日常工作流程中最重要的环节之一了。如果渲染速度加快&#xff0c;可能是要看渲染技巧掌握的有多少了。 大家熟悉的3d Max本地渲染通道&#xff0c;对于CG MAGIC渲染功能你也一定不能错过&#xff0c;要知道操作简单易使用&#xff0c;就完全拿捏了效率…

防溺水智能预警系统解决方案 yolov7

防溺水智能预警系统解决方案采用yolov7先进的AI视觉识别算法模型框架&#xff0c;防溺水智能预警系统解决方案算法实现对危险水域人员活动、水面情况等各项指标的监测和分析。当发现有人进入危险水域或出现紧急情况时&#xff0c;算法会立即发出预警信号。Yolo算法采用一个单独…

c#继承(new base)的使用

概述 C#中的继承是面向对象编程的重要概念之一&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和行为。 继承的主要目的是实现代码重用和层次化的组织。子类可以继承父类的字段、属性、方法和事…

MySQL忘记密码->重置密码

MySQL忘记密码->重置密码 无密码登录root 以管理员权限进入CMD&#xff0c;在命令行输入&#xff1a;net stop mysql MySQL停止服务后&#xff0c;输入mysqld --shared-memory --skip-grant-tables&#xff0c;以锁定命令提示符窗口&#xff0c;我们需要重新打开一个管理员…

vivo2020届春季校园招聘在线编程考试(一)

题目&#xff1a; 手机屏幕解锁模式 现有一个 3x3 规格的 Android 智能手机锁屏程序和两个正整数 m 和 n &#xff0c;请计算出使用最少m 个键和最多 n个键可以解锁该屏幕的所有有效模式总数。 其中有效模式是指&#xff1a; 1、每个模式必须连接至少m个键和最多n个键&#xf…

Sharding-JDBC(八)5.3 系列升级解读

目录 一、背景二、影响范围1.Maven 坐标调整2.自定义算法调整3.事务调整4.配置文件调整 三、升级指导1.新的 ShardingSphereDriver 数据库驱动2.正在使用 Spring Boot Starter 如何升级升级前升级后 3.正在使用 Spring Namespace 如何升级升级前升级后 四、总结 5.3.0 官方文档…

实训笔记8.30

实训笔记8.30 8.30笔记一、项目开发流程一共分为七个阶段1.1 数据产生阶段1.2 数据采集存储阶段1.3 数据清洗预处理阶段1.4 数据统计分析阶段1.5 数据迁移导出阶段1.6 数据可视化阶段 二、项目数据清洗预处理的实现2.1 清洗预处理规则2.2 代码实现 三、项目的数据统计分析阶段3…

Linux通信--构建进程通信IPC的方案之共享内存|实现使用共享内存进行serverclient通信

共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;即进程不再通过执行进入内核的系统调用来传递彼此的数据。 目录 一、共享内存的原理 二、使用共享内存 三、共享内存函数 1.shmget(用来创建共…

字节跳动岗位的薪酬体系曝光,看完感叹:真的不服不行

曾经的互联网是PC的时代&#xff0c;随着智能手机的普及&#xff0c;移动互联网开始飞速崛起。而字节跳动抓住了这波机遇&#xff0c;2015年&#xff0c;字节跳动全面加码短视频&#xff0c;从那以后&#xff0c;抖音成为了字节跳动用户、收入和估值的最大增长引擎。 自从字节…

Web3数据云OORT推出商用版智能代理构建平台:OORT TDS

随着技术进步和数据隐私问题的日益凸显&#xff0c;生成式AI和去中心化技术联手为企业和个人开辟了全新的互动视野。站在这一趋势的前沿&#xff0c;OORT展现了其在去中心化数据云领域的技术实力&#xff0c;作为行业的领先者&#xff0c;今日Oort正式宣布OORT TDS (Talk-to-Da…

MAGNA 直连 EDI 解决方案

全球首屈一指的汽车零部件供应商&#xff0c;在28个国家设有335家制造工厂&#xff0c;96个产品开发、工程和销售中心。产品主要包括制造车身、底盘、外饰、座椅、动力总成、电子、主动驾驶辅助、镜像、闭锁以及车顶系统&#xff0c;拥有多个领域的电子和软件工程能力。 MAGNA与…

row_number() over(partition by xx order by xx desc)

一、目的 主要用于根据某个字段对数据分组去重 二、demo 1. 有数据表 duplicate_test 如下 2. 使用 name 作为 key 对数据分组&#xff0c;并增加一列标识序号 idx&#xff08;根据 时间戳倒序标记序号&#xff09; select name,row_number() over(partition by name order…

IT6225B芯片方案|替代IT6225B方案|CS5366国产Typec转hdmi投屏方案

国产CS5366 透过模拟与数字的设计及28nm先进制程工艺,大幅降低功耗,无需增加散热片,提高产品可靠性,CS5366完全替代联阳IT6225B/IT6225,CS5366是一款Type-C转HDMI 2.0 4K60USB 3.0PD3.1/3.0高集成度视频转换芯片方案. 1.cs5366功耗低&#xff1a; CS5366系列符合USB电源传输规…

TCP数据报结构分析(面试重点)

在传输层中有UDP和TCP两个重要的协议&#xff0c;下面将针对TCP数据报的结构进行分析 关于UDP数据报的结构分析推荐看UDP数据报结构分析&#xff08;面试重点&#xff09; TCP结构图示 TCP报头结构的分析 一.16位源端口号 源端口表示发送数据时&#xff0c;发送方的端口号&am…

IO模型:阻塞和非阻塞

一、五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞&#xff1a;不能操作就返回错误 多路复用&#xff1a;委托中介监控 信号驱动&#xff1a;让内核如果能操作时发信号&#xff0c;在信号处理函数中操作 异步IO&#xff1a;向内核注册操作请求&…