Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >可路由计算引擎实现前置数据库

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

作者头像
石臻臻的杂货铺[同名公众号]
发布于 2023-03-11 09:24:43
发布于 2023-03-11 09:24:43
5040
举报
文章被收录于专栏:kafka专栏kafka专栏

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

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

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

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

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

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

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

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

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

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

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

A

B

1

=begin_year=2021

=end_year=2022

2

if begin_year>=year(now())-1

=file(“sales.ctx”).open().cursor@m(…;year(sdate)<=end_year)

3

return B2.groups(customer;sum(…),avg(…),…)

4

else

=connect(“DW”).query(“select customter,sum(…),avg(…) from sales where year(sdate)>=? And year(sdate)<=? group by customer”,begin_year,end_year)

5

return B4

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

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

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

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

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

SPL资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/02/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从SPL看开放计算能力的意义
关系数据库提供了SQL,因而有较强的计算能力,但很遗憾的是,这个计算能力是封闭的。所谓计算封闭性,是指要被数据库计算和处理的数据,必须事先装入数据库之内,数据在数据库内部还是外部是很明确的。与之相对,计算开放性是指数据无需进入内部就可以直接处理多种来源的数据。
石臻臻的杂货铺[同名公众号]
2022/12/07
6150
从SPL看开放计算能力的意义
BI 的前置计算
某机构上了一套分布式数据仓库,历史数据逐步装进了仓库,然后,基于数据仓库构建了 BI 系统(主要是多维分析)。刚开始,一切都顺利,但随着时间推移,基于中央数据仓库的应用越来越多,几年下来积累了数十个应用。这些应用都需要依赖数据仓库计算,导致中央数据仓库的负担越来越重,BI 系统的响应开始变得迟钝起来。对于交互性很强的多维分析业务来讲,这是很难容忍的。
朱迪
2024/10/28
760
BI 的前置计算
单机顶集群的大数据技术来了
大数据时代的分布式数仓(如 MPP)是个热门技术,甚至到了提到数据仓库言必称分布式的地步。 但是,分布式数仓真有必要吗?毕竟这些分布式数仓产品都不便宜,无论是采购成本还是运维成本都很高。是不是有低成本轻量级的方案呢?
朱迪
2024/11/20
910
单机顶集群的大数据技术来了
这可能是最轻量级的列存技术了
列式存储是提高数据分析计算性能的重要手段。如果数据表的总列数很多而计算涉及的列很少,采用列存就只读取需要的列即可,能够减少硬盘访问量,提高性能。而且,同一列数据往往是同一类型的,甚至有些情况取值都很接近,这样的一批数据连续存储,通常可以实施更高效的数据压缩。
朱迪
2025/03/04
700
开源 SPL 打破数据库计算的封闭性
我们知道,数据库的数据处理能力是封闭的。所谓封闭性,这里是指要被数据库计算和处理的数据,必须事先装入数据库之内,数据在数据库内部还是外部是很明确的。
大数据梦想家
2022/10/31
6930
开源 SPL 打破数据库计算的封闭性
WEB 上的计算引擎
Web 上的数据接口以 restful 和 WebService 为主,格式通常是多层的 Json 和 XML。多层数据可承载更通用更丰富的信息,但结构上比传统的二维数据复杂,计算难度也更大。可用于 Web 计算的工具或引擎表面上不少,但都有各自的缺点,JsonPath/XPath 等类库解析能力强,但计算能力不足;Python Pandas 计算能力较强,但难以被 Java 集成,而且数据对象 DataFrame 不是专为多层数据设计的,遇到复杂计算时代码也难写;Scala Spark 在集成性方面好一些,但架构沉重,学习难度也大。
朱迪
2024/12/18
1300
怎样做多数据源的混合计算
早期应用通常只会连接一个数据库,计算也都由数据库完成,基本不存在多数据源混合计算的问题。而现代应用的数据源变得很丰富,同一个应用也可能访问多种数据源,各种 SQL 和 NoSQL 数据库、文本 /XLS、WebService/Restful、Kafka、Hadoop、…。多数据源上的混合计算就是个摆在桌面需要解决的问题了。
朱迪
2023/12/21
1950
JAVA实现数据库_数据库是如何解决并发问题
我们知道,数据库的数据处理能力是封闭的。所谓封闭性,这里是指要被数据库计算和处理的数据,必须事先装入数据库之内,数据在数据库内部还是外部是很明确的。
全栈程序员站长
2022/11/17
6670
JAVA实现数据库_数据库是如何解决并发问题
轻量级的大数据处理技术
作为数据中心(中间部分)处于各种应用与数据源之间,对下对接多种数据源处理分析所有数据,对上要为各个应用提供数据服务,其重要性不言而喻。数据中心由于要处理的数据规模庞大、要响应的任务繁多,几乎都会采用大数据集群技术实现,这样才能满足庞大的业务需求,同时还可以横向扩容提升算力以满足不断增长的业务需要。
朱迪
2024/12/05
1510
轻量级的大数据处理技术
流计算需要框架吗?SPL 可能是更好的选择
流数据源通常是动态、无界的,看起来与静态、有限的批数据源区别较大,传统的数据库技术在架构上难以直接处理流数据源,只能让位于后来者。heron\samza\storm\spark\flink等计算框架最先完成突破,在流计算技术中占得先发优势。这些框架非常成功,以至于一说到流计算,应用程序员通常都会去转头寻找某种框架,而不宣称是某种框架的计算技术,则通常被认为不适合实现流计算。
朱迪
2025/01/08
1450
流计算需要框架吗?SPL 可能是更好的选择
跑在文件系统上的数据仓库
我们知道数据仓库是晚于数据库出现的,当 TP 数据库无法满足日益增长的数据分析需要时,人们便通过架设单独的数据库把 AP 业务独立出来就形成了数据仓库(逻辑概念)。后续出现了专门的数据仓库产品为 AP 业务服务,由于数据仓库在技术上本身也是个数据库,因此继承了数据库的诸多特性,比如元数据和数据约束,这使得从 TP 数据库过渡到 AP 数据仓库较为平滑。
朱迪
2024/12/23
840
跑在文件系统上的数据仓库
开源 SPL 消灭数以万计的数据库中间表
中间表是数据库中专门存放中间计算结果的数据表,往往是为了前端查询统计更快或更方便而在数据库中建立的汇总表,由于是由原始数据加工而成的中间结果,因此被称为中间表。在某些大型机构中,多年积累出来中间表的数量居然高达数万张,给系统和使用造成了很多麻烦。
朱迪
2025/03/27
640
开源 SPL 消灭数以万计的数据库中间表
一个比 SQL 还快的数据库语言,开源了!
与 SQL 相比,SPL 不仅写得简单,跑得也更快,既可以独立使用还能与应用集成嵌入,同时适用于多种应用场景。
GitHubDaily
2023/04/27
1.5K0
一个比 SQL 还快的数据库语言,开源了!
SQL后计算的利器SPL
现代应用开发中,通常只用SQL实现简单的数据存取动作,而主要的计算过程和业务逻辑直接在应用程序中实现,主要原因在于:
灰小猿
2022/09/02
1.2K0
怎样用 esProc 实现冷热混合运算
冷热数据分库以后再混合查询就比较麻烦。很多数据库都不支持,部分支持的能力也有限,还涉及大量数据复制效率也不高;如果分别读出在 Java 里计算又太复杂。esProc 是个不依赖数据库的计算引擎,支持各种数据源,有丰富的计算类库,还能嵌入 Java 使用,天然适合在应用中做冷热数据库混合计算。
朱迪
2025/04/14
440
数据湖的不可能三角
提到数据湖就要先说一下数据仓库,数据仓库是集成多业务系统数据、面向主题的、专门用于数据查询分析的数据组织形式。当业务系统数据量不断增大、业务系统数量不断增多以后,数据仓库的出现就会成为必然。原始数据入仓时需要经过一系列清洗转换,以及深度组织才能满足业务的需要。因此数据仓库要解决的核心问题是:回答业务中已有的问题。这些问题必须事先定义好。
朱迪
2024/12/03
980
数据湖的不可能三角
开源SPL助力JAVA处理公共数据文件(txt/csv/json/xml/xsl)
在 JAVA 应用中经常要处理 txt\csv\json\xml\xls 这类公共格式的数据文件,直接用 JAVA 硬写会非常麻烦,通常要借助一些现成的开源包,但这些开源包也都有各自的不足。
石臻臻的杂货铺[同名公众号]
2022/06/14
1.2K0
开源SPL助力JAVA处理公共数据文件(txt/csv/json/xml/xsl)
OLAP计算引擎怎么选?
大家好,我是一哥,今天聊一聊OLAP技术,一哥认为好的OLAP引擎应该具备以下三个条件:易开发、易维护、易移植。今天给大家分享一下常见的几种OLAP计算引擎,他们的特性、适用场景,优缺点等,希望对大家在选型应用上有帮助。
数据社
2020/12/08
2.1K0
OLAP计算引擎怎么选?
查询计算移出数据库用 Java 太慢咋办
很多现代应用会把数据计算和处理任务从数据库移出来采用 Java 实现,这样能获得架构上的好处,而且 Java 有完善过程处理能力,应对日益复杂的业务逻辑比 SQL 更得心应手(虽然代码不短)。不过,我们常常会发现,这些 Java 代码计算和处理数据的性能不如人意,赶不上数据库里的 SQL。 按说,作为编译型语言的 Java,性能虽然赶不 C++,但总该比解释型的 SQL 更有优势才对,但事实却并不是。
朱迪
2024/10/22
1170
查询计算移出数据库用 Java 太慢咋办
不用 SQL 的数据仓库
当前绝大部分数据仓库都会采用 SQL,SQL 发展了几十年已经成为数据库界的标准语言,用户量巨大,所以支持 SQL 对于数据仓库来讲也是很正常的。但是,在当代大数据背景下,业务复杂度节节攀升,在以计算为主要任务的数据仓库场景下,SQL 似乎越来越不够用了。典型表现是一些数据仓库开始集成 Python 的能力,将 Python 这样的非 SQL 语言融入到数据仓库中。且不论两种风格迥异的开发语言是否能很好融合互补,单看这样的趋势已经足够表现出业界对 SQL 能力的一些质疑。
搜云库技术团队
2023/10/21
2270
不用 SQL 的数据仓库
相关推荐
从SPL看开放计算能力的意义
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档