可路由计算引擎实现前置数据库

news2024/11/23 10:49:08

❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆

❤️技术活,该赏

❤️点赞 👍 收藏 ⭐再看,养成习惯

PC端左侧加我微信,进社群,有送书等更多活动!

中央数据仓库局限

很多大机构都会有个中央数据仓库负责向应用提供数据服务。随着业务的发展,中央数据仓库的负载在持续增加。一方面,数仓是前端应用的数据后台,而前端应用不断增多,用户访问的并发数也不断增长。另一方面,数仓还要承担原始数据的批量离线处理,而批量任务不断增加,其数据量和计算量也在不断增大。所以,常常会出现中央数据库不堪重负的情况。表现出来的现象是:批量处理任务耗时过长,远远超过业务可以容忍的时限;在线数据查询响应太慢,用户长时间等待,满意度越来越差。特别是月末或者年末,计算量达到高峰的时候,这些问题会更加严重。

解决方案

方案一:提高中央数据仓库负载能力

解决这个问题最容易想到的方法是提高中央数据仓库的负载能力,也就是对现有数仓进行扩容或者更换其他数仓产品。但是,数仓扩容涉及的软硬件成本都很高,频繁扩容意味着无法承受的巨大投入。而且,数据仓库一旦达到容量上限,这个办法也就不可行了。

将现有的数据仓库换成其他数仓产品的可行性也不高,这牵扯到多个部门、多种应用,更换的综合成本太高,风险也很大。即使真的换了,也不能保证很好的解决这个问题。

方案二:前置库方案

我们发现,现实中的很多应用都有这样一个特点:有一部分小量(热)数据访问频率远高于其它的大量(冷)数据,比如对最近几天数据的查询可能占全部查询的 80% 到 90%。我们可以利用这个特点来解决问题,具体做法是:在中央数据库和前端应用之间增加前置数据库,存放访问频次高的少量热数据。前端应用的查询请求统一提交给前置数据库,由前置库判断查询的是热数据还是冷数据,相应的访问本地数据,或将请求转发给中央数据仓库。最后,将热、冷数据计算结果整合后,统一返回给前端。前置库方案大致是下图这样:

这个方案中,数据流动的路径要遵循一定的数据路由规则:频繁出现的针对少量热数据的查询由前置数据库负责,偶尔出现的针对大量冷数据的查询由中央数仓负责。这样,中央数仓的负载大大降低,不再成为拖累性能的瓶颈。

但是,传统数据库或数仓软件却很难实现这种前置库方案。这是因为,数据库的计算能力是封闭的,只能计算库内的数据,很难实施计算路由规则、查询转发和结果整合等。而且,前置数据库和数据仓库一般是不同类型的软件产品,这时候会更难以实现这类跨库的运算。

按照我们设想的方案,前置库中只会存储少量热数据。如果将传统数据库用作前置库,就只能计算这些热数据,不能计算冷数据,更无法实现冷热数据整合。显然,我们也不可能让前置数据库存储全量数据,这会变成第二个中央数据仓库,不仅带来巨大的成本,也会造成重复建设。

方案三:可路由计算引擎 esProc SPL 实现的前置数据库

如果不能在前置数据库上实现计算路由,就只能在前端应用上想办法。比如在界面上让用户自己选择数据源,但这会降低应用程序的易用性,影响用户满意度。再比如修改应用程序来实现路由和数据整合,但应用程序端并不擅长处理这类运算,结果会导致代码量会很大,开发维护成本高,还很难通用。

esProc SPL 是专业的结构化、半结构化计算引擎,提供开放的计算能力,数据可以从本地存储读取,也可以来自于各种异构数据源,能够轻松实现上述方案中的各种计算需求,非常适合承担前置数据库的作用。SPL 实现前置数据库的架构图大致是下图这样:

SPL 是轻量级计算引擎,热数据量不大时,可以单机部署,甚至可以直接嵌入前端应用中,系统建设成本相对于传统数据库要低很多。

SPL 实现数据路由规则的代码非常简捷。假设前端应用要按客户分组统计,输入参数是开始和结束年份。前端应用的请求中 90% 以上都是计算今年和去年的数据,所以将这两年的热数据存放在 SPL 的组表 sales.ctx 中,全量数据存仍放在中央数据库的 sales 表中。这时,前端应用的请求提交给前置库后,SPL 实现数据路由的代码大致是这样:

AB
1=begin_year=2021=end_year=2022
2if begin_year>=year(now())-1=file(“sales.ctx”).open().cursor@m(…;year(sdate)<=end_year)
3return B2.groups(customer;sum(…),avg(…),…)
4else=connect(“DW”).query(“select customter,sum(…),avg(…) from sales where year(sdate)>=? And year(sdate)<=? group by customer”,begin_year,end_year)
5return B4

A1、A2:前端提交的开始年份和结束年份,实际应用中应作为参数传入,这里为了方便理解直接写在代码中了。

A2-B3:如果开始年份大于等于去年,则用本地热数据 sales.ctx 计算结果,并返回。这里的过滤、分组计算,SPL 只要一两个函数就可以实现。

A4-B5:其他情况则连接中央数据仓库 DW,执行请求并返回结果。SPL 可以轻松连接各种数据库、数据仓库,很容易转发前端的请求,并统一给前端应用返回结果。

SPL 封装了大量结构化、半结构化计算函数,即使面对非常复杂的计算,也可以用很简捷的代码实现。相反,如果在前端应用中利用 Java 等高级语言来实现简单的过滤、分组汇总计算,也需要编写大量代码。

可路由计算引擎 esProc SPL 实现的前置数据库,将少量高频访问的热数据缓存在本地,可以有效提升系统整体的响应速度,减少用户等待时间。同时,前置数据库将绝大部分查询计算从中央数据仓库分离出来,减轻了中央数仓的负担。

SPL资料

  • SPL下载
  • SPL源代码

我是虚竹哥,我们下文见~

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

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

相关文章

非零基础自学Golang 第9章 结构体 9.1 理解结构体 9.2 定义结构体 9.3 实例化结构体

非零基础自学Golang 文章目录非零基础自学Golang第9章 结构体9.1 理解结构体9.2 定义结构体9.3 实例化结构体9.3.1 标准实例化9.3.2 new函数实例化9.3.3 取地址实例化9.3.4 访问成员第9章 结构体 在Go语言官网的常见问题解答一栏中&#xff0c;有这样一个问题&#xff1a;“Is…

Fiddler(7):fiddler设置弱网测试

弱网测试 概念&#xff1a;弱网看字面意思就是网络比较弱&#xff0c;我们通称为信号差&#xff0c;网速慢。 意义&#xff1a;模拟在地铁、隧道、电梯和车库等场景下使用APP &#xff0c;网络会出现延时、中断和超时等情况。 Fiddler弱网测试流程&#xff1a; 一、限速操作…

基于云开发的微信小程序、QQ小程序详细教程(更新中)

云开发解决方案 小程序云开发解决方案 为企业和开发者提供一站式后端云服务&#xff0c;无需管理基础架构&#xff0c;一次开发多端运行&#xff0c;腾讯云和微信联合出品。 云开发&#xff08;Tencent CloudBase&#xff0c;TCB&#xff09;是腾讯云提供的云原生一体化开发环…

数据结构---大整数相加

大整数相加列竖式运算第一步第二步第三步第四步JAVA实现给出两个很大的整数&#xff0c;要求实现程序求出两个整数之和。 记得这个题目我大二ACM课程老师讲过&#xff0c;但是忘记了。。。。。。。。。。 列竖式运算 程序不可能通过一条指令计算出两个大整数之和&#xff0c;…

【学习打卡04】可解释机器学习笔记之Grad-CAM

可解释机器学习笔记之Grad-CAM 文章目录可解释机器学习笔记之Grad-CAMGrad-CAM介绍Grad-CAM是CAM的泛化形式Gard-CAM可视化结果Grad-CAM算法的优点Grad-CAM算法的缺点Grad-CAM变种Grad-CAMScore-CAMLayer-CAM思考与总结参考阅读首先非常感谢同济子豪兄拍摄的可解释机器学习公开…

SAP S4 FICO 固定资产模块后台配置详解

1. 概述 资产会计&#xff08;FI-AA&#xff09;作为总帐模块&#xff08;FI-GL&#xff09;的子分类帐&#xff0c;对企业的固定资产、无形资产、在 建工程、低值易耗品、长期待摊、从购置、资本化、折旧、调拨到出售/报废的整个生命周期 进行全过程的管理&#xff0c;并和…

java实现给微信群中定时推送消息

大家好&#xff0c;我是雄雄。 前言 上一篇&#xff0c;我们介绍了如何通过调用接口的方式&#xff0c;将每日新闻发送到自己的博客中。我们会发现&#xff0c;将新闻以文章的形式发布&#xff0c;并且相关内容按照markdown的形式进行格式调整&#xff0c;有需要的可以点击这里…

获取小程序生产、开发、体验等环境、版本信息、appid等信息

if (typeof __wxConfig "object"){const version __wxConfig.envVersion;console.log("当前环境:" version)if (version "develop"){cosole.log(测试 开发环境)}else if (version "trial"){cosole.log(测试 体验版)}else if (versio…

【电力系统】基于YALMIP+CPLEX求解带储能的微电网优化调度问题附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【树莓派不吃灰】兄弟连篇② 文件编辑器vim与RPM软件包管理、yum

目录1、文件编辑器Vim1.1 工作模式1.2 插入命令1.3 定位命令1.4 删除命令1.5 复制和剪切命令1.6 替换和取消命令1.7 搜索和搜索替换命令1.8 保存和退出命令1.9 使用技巧2、yum包管理2.1 网络yum源2.2 yum命令2.3 rpm包与源码包安装位置❤️ 博客主页 单片机菜鸟哥&#xff0c;一…

联盛德W801开发板流水灯示例

联盛德W801开发板流水灯示例&#x1f4fa;&#x1f4fd;&#x1f39e;&#x1f3ac;本实验通过利用开发板中间的7个led&#xff0c;控制对应的IO实现流水灯效果。 &#x1f4dc;W801 32位WiFi蓝牙双模SoC开发板 &#x1f6e0;开发工具以及示例Demo工程 参考&#xff1a;《W801…

【数学模型】基于ARMR模型模拟风速附matlab完整代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

图计算的学习与思考

好的软件不是靠程序分析、查错查出来的&#xff0c;而是由正确的人构建出来的。图成为日益重要的运算对象&#xff0c;图结构是对群体关系的一种抽象&#xff0c;可以描述丰富的对象和关系。图计算的核心是如何将数据建模为图结构以及如何将问题的解法转化为图结构上的计算问题…

MySQL高级【存储引擎】

目录 1&#xff1a;Mysql体系结构图&#xff1a; 2&#xff1a;存储引擎简介 3&#xff1a;存储引擎特点 InnoDB存储引擎&#xff1a; MyISAM存储引擎&#xff1a; Memory存储引擎&#xff1a; 4&#xff1a;存储引擎选择 5&#xff1a;存储引擎小结 1&#xff1a;Mysq…

.net core 在arm linux 上运行

一、环境 开发板&#xff1a;OKMX6ULL 硬件&#xff1a;cortex A7 软件环境&#xff1a;Linux version 4.1.15-00041-g92e8c0f (zsdeveloper-RH2485-V2) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Mon May 24 17:20:23 CST 2021 .net core 版本&#xff1a; 二、问题 1…

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了

网络攻防中的支持多种社交媒体的网络 go-fish 工具(包含智能探测、用户查找、权限提升等等),需谨慎使用,不然要被请去喝茶了。 ShellPhish是一个可定制的网络 go-fish 工具,基于SocialFish。 支持以下社交平台: Instagram Facebook Twitter Snapchat Github Yahoo…

Linux学习笔记——Linux基础命令

02、Linux基础命令 2.1、Linux的目录结构 1、学习目标 掌握Linux系统的目录结构掌握Linux系统的路径表达式 2、Linux的目录结构是一个树型结构 Windows系统可以拥有多个盘符&#xff0c;如C盘、D盘、E盘 Linux没有盘符这个概念&#xff0c;只有一个根目录/&#xff0c;所有…

【大数据趋势】趋势在发生变化,稍安勿躁。

昔日(12月以前)行情核心源头 : 纳斯达克指数主连日线&#xff0c;趋势预测准确&#xff0c;继续筑底可能中 回顾一下上周大数据预测的趋势&#xff0c;指数用上引线方式神奇完成目标 【12.3趋势模拟情况】 预计&#xff1a;趋势不变情况下&#xff0c;预测反弹到黄金分割线…

基于预训练和对比学习的新意图发现

前言 从对话人的语句中发现新意图是一个研究方向 一般来说就是对句子通过聚类来解决这一问题&#xff0c;所以这里通常会涉及到两个问题&#xff1a; &#xff08;1&#xff09;怎么表征好一个句子 &#xff08;2&#xff09;怎么更好的聚类 今天就给大家介绍本篇&#xff5e;&…

通信技术对自动驾驶发展的关键作用

【摘 要】随着自动驾驶的快速发展,新技术逐渐涌现,通信技术被产业认为是未来网联化自动驾驶发展的关键技术。从通信角度出发,分析通信技术为自动驾驶在技术及可靠性、成本控制、以及社会效益方面带来的提升,详细介绍了3GPP R16 5G-V2X在自动驾驶业务方面带来的技术优化,并…