【云原生】开源数据分析 SPL 轻松应对 T+0

T+0问题

T+0查询是指实时数据查询,数据查询统计时将涉及到最新产生的数据。在数据量不大时,T+0很容易完成,直接基于生产数据库查询就可以了。但是,当数据量积累到一定程度时,在生产库中进行大数据量的查询会消耗过多的数据库资源,严重时会影响交易业务,这就不能接受了,毕竟生产交易是更关键的任务。所以,我们常常会把大量用于查询分析的历史数据从生产库中分离出去,使用单独的数据库存储和查询,以保证查询统计不会影响生产业务,这就是常说的冷热数据分离。

在这里插入图片描述

数据分离后就会产生T+0问题。数据拆分到两个数据库中,要查询全量数据就涉及跨库查询。而且,我们知道,用于交易的生产库大多使用能够保证事务一致性的RDB,而分离出来的冷数据(量大且不再修改)则会更多使用专门的分析型数据库或数据平台存储,即使是关系数据库也很可能与原来的生产库类型不同,这就不仅涉及跨库,还需要跨异构库(源)查询。遗憾的是,当前实现跨库查询的技术都存在这样那样的问题。

数据库自身的跨库查询功能(如Oracle的DBLink、MSSQL的Linked Server、MySQL的FEDERATED、等)通常是将远程数据库的数据拉到本地,再在本地完成包括过滤在内的大部分计算,整个过程十分低效。不仅如此,这种方式还存在数据传输不稳定、不支持大对象操作、可扩展性低等很多不足。

事实上,要解决分库后的T+0查询问题也并非难事,只要有具备这样一些能力的计算引擎就可以实现:能够对接多种数据源;拥有不依赖数据库的完善计算能力以完成多库数据归集后的数据计算工作;还可以利用数据库(源)的能力充分发挥数据库的效能;提供简单的数据计算接口;性能相对理想等。

除了数据库自身的跨库查询能力,使用高级语言硬编码也可以完成跨库查询,毕竟没有什么问题不是硬编码解决不了的。这种方式虽然灵活,但使用难度却很大,尤其对于当前大部分应用的开发语言Java来说,缺少足够的结构化数据计算类库使得完成跨库查询后的计算很难完成,通常只能做简单的列表式查询,而涉及到统计汇总类的运算就会异常麻烦。

引入SPL

可以借助开源SPL可以实现这些目标。SPL是一款开源数据计算引擎,提供了大量结构化数据计算函数并拥有完备计算能力,支持多数据源混合计算,可以同时连接存储热数据的业务库和存储冷数据的历史库完成全量数据T+0查询。

由于具备独立且完善的计算能力,SPL可以分别从不同的数据库取数计算,因此可以很好适应异构数据库的情况,还可以根据数据库的资源状况决定计算是在数据库还是SPL中实施,非常灵活。在计算实现上,SPL的敏捷语法与过程计算可以大大简化T+0查询中的复杂计算,提升开发效率,SPL解释执行支持热部署。更进一步,依托SPL的强计算能力还可以完成冷热数据分离时的ETL任务。

SPL还提供了自有的高性能二进制文件存储,对性能要求较高时可以将历史冷数据使用文件存储,再借助SPL的高性能算法与并行计算来提升查询效率。此外,SPL封装了标准应用接口(JDBC/ODBC/RESTful)供应用集成调用,也可以将SPL嵌入应用中使用,这样应用就轻松具备了T+0查询与复杂数据处理能力,将计算和存储分离也更符合当代应用架构的需要。

冷热混合计算

对于常见的冷热分库T+0查询场景,SPL实现很简单,这里看一个例子。

A B
1 =[[connect@l("oracle"),"ORACLE"],[connect@l("mysql"),"MYSQL"]]
2 =SQL="select month(orderdate) ordermonth,sellerid,sum(amount) samount,count(amount) camount from sales group by month(orderdate),sellerid"
3 fork A1 =SQL.sqltranslate(A3(2))
4 =A3(1).query(B3)
5 =A3.conj().groups(ordermonth,sellerid;sum(samount):totalamount,sum(camount):totalcount)

本例中,Oracle作为生产库存储当期热数据,MySQL存储历史冷数据。前端传入一句标准SQL(A2),再借助SPL的转换功能将标准SQL转换成对应数据库的语法(B3)并发给数据库查询(B4),最后归并结果进行最后的汇总运算(A5)。这里使用了多线程并行方式(A3)同时执行两个SQL,效率更高。

在这里,SPL不仅完成了两个数据库的跨库查询,还提供了SQL转换方法,更利于前端应用使用,同时拥有合并两个数据库计算结果后的继续计算能力,本例是分组汇总。SPL还有更丰富的结构化数据对象及其上的丰富运算,除了分组汇总、循环分支、排序过滤、集合运算等基础计算外,位置计算、排序排名、不规则分组也不在话下。

除了RDB,对于有些场景涉及的NoSQL、Hadoop等数据源也能支持,SPL具备多源混算能力,无论基于何种数据源都可以进行混合查询实现T+0。比如MongoDB与MySQL混合查询:

A
1 =mongo_open("mongodb://127.0.0.1:27017/mongo")
2 =mongo_shell(A1,"Orders.find()")
3 =A2.new(Orders.OrderID:orderid,Orders.Client:client,Dept:dept,Amount:amount).fetch()
4 =mongo_close(A1)
5 =mysql.query@x(“select ordered,client,dept,amount from orders”)
6 =[A3,A5].conj()
7 …后续计算

SPL的计算能力还能用于ETL,将生产数据转移到历史库中,还经常伴随一些转换计算,这些都可以使用SPL来完成。比如出于某些原因,要将生产数据某些编码字段通过某个对照表转换成另一种编码(遵守一致性的编码规则、整理数据类型获得更好性能等),而对照表通常并不会存在生产库中,而不能直接在生产库中计算好,这就涉及多数据源计算了。

A
1 >source=connect@l(“oracle”),target=connect@l(“mysql”)
2 =source.cursor(“select * from orders”)
3 =target.query(“select oldCode,newCode from codeComp”).keys@i(oldcode)
4 =A2.run(pid=A3.find(pid).newcode)
5 >target.execute(A2,"insert into orders values(?,?,?,?,?) ",#1,#2,#3,#4,#5)
6 >source.close(),target.close()

高性能

历史冷数据量可能很大,使用RDB存储容易受到资源容量等因素限制,而且数据读取效率很差。相比下文件存储具备很多优势,不仅读取效率更高,还可以有效利用并行、文件压缩等机制提速,同时也不会像数据库容易受到容量的限制。不过开放的文本格式使用效率不高(无压缩、解析数据类型慢等),一般会使用二进制格式文件。另外,文件存储的最大问题是没有计算能力,不像数据库使用SQL可以很方便完成数据处理,通过硬编码处理的难度很大。

这些问题都可以通过SPL来解决,SPL提供了两种高性能二进制数据存储格式集文件和组表,再借助SPL的独立计算能力可以直接基于文件和数据库混合计算实现高效T+0查询。比如前面的例子,可以使用SPL文件存储历史冷数据与生产库热数据混合查询。

A
1 =connect("oracle")
2 =A1.query@x("select sellerid, sum(amount) totalamount, count(amount) countamount,max(amount) maxamount,min(amount) minamount from sales group by sellerid")
3 =file(“his_sales.btx”).cursor@b()
4 =A3.groups(sellerid;sum(amount):totalamount,count(amount):countamount,max(amount):maxamount,min(amount):minamount)
5 =[A3,A4].conj().groups(sellerid;sum(totalamount):totalamount,sum(countamount):countamount,max(maxamount):maxamount,min(minamount):minamount)

将历史数据存储在文件后与生产库混合查询,历史数据使用游标可以支持大数据场景,A4针对文件游标进行分组汇总,A5归并数据并汇总分组结果。这里使用了SPL提供的二进制集文件(btx),相对文本更加高效。集文件采用了压缩技术(占用空间更小读取更快),存储了数据类型(无需解析数据类型读取更快),支持可追加数据的倍增分段机制,利用分段策略很容易实现并行计算,保证计算性能。

SPL还支持各种高性能算法。比如常见的TopN运算,在SPL中TopN被理解为聚合运算,这样可以将高复杂度的排序转换成低复杂度的聚合运算,而且很还能扩展应用范围。

SPL还有另外一种支持列存的高效存储形式组表,在参与计算的列数(字段)较少时会有巨大优势。组表上还实现了minmax索引,也支持倍增分段,这样不仅能享受到列存的优势,也更容易并行提升计算性能。

A
1 =file(“data.ctx”).create().cursor()
2 =A1.groups(;top(10,amount)) 金额在前10名的订单
3 =A1.groups(area;top(10,amount)) 每个地区金额在前10名的订单

这里的语句中没有排序字样,也不会产生大排序的动作,在全集还是分组中计算TopN的语法基本一致,而且都会有较高的性能,类似的算法在SPL中还有很多。

SPL也很容易实施并行计算,发挥多CPU的优势。SPL有很多计算函数都提供并行机制,如文件读取、过滤、排序只要增加一个@m选项就可以自动实施并行计算,简单方便。

易集成

SPL封装了标准JDBC和ODBC接口供应用调用,特别对于Java应用可以将SPL嵌入应用内使用,T+0查询能力在应用端实现,不再依赖数据源,这样可以充分解耦应用与数据源,获得很好的移植性和可扩展性。

JDBC调用SPL 代码示例:

Class.forName("com.esproc.jdbc.InternalDriver");
Connection conn =DriverManager.getConnection("jdbc:esproc:local://");
Statement st = connection.();
CallableStatement st = conn.prepareCall("{call splscript(?, ?)}");
st.setObject(1, 3000);
st.setObject(2, 5000);
ResultSet result=st.execute();

SPL是解释执行的,天然支持热切换。基于SPL的数据计算逻辑编写、修改后不需要重启,实时生效,使开发运维更加便捷。

相对其它T+0实现技术,SPL借助自身独立的强计算与跨数据源计算能力可以更方便完成T+0查询,同时提供的高性能存储和高性能算法可以充分保障查询效率,良好的集成性使得应用端可以轻松具备这些能力,是名副其实的T+0查询利器。

SPL资料

  • SPL下载
  • SPL源代码

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

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

相关文章

这款国产API神器工具也太强了吧...让我放弃了postman

今天我发现了一款国产化的API工具,去官网看了下它的中文页面,觉得很干净、倍感亲切,我感觉Eolink结合了postman 和 swagger 的优点。摒弃了不足、甚至发生了公开踩踏事件,最近国产API管理工具越来越卷,但最后还是要回归…

快收藏!最适合计算机大学生的Java毕业设计项目--音乐视频网站系统!

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ 🍅文末获取源码联系🍅 精彩专栏推荐👇&#x1…

基于Java+SpringBoot+mybatis+vue+element实现旅游管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ 🍅文末获取联系🍅 精彩专栏推荐👇&#…

基于Java+SpringBoot+vue+elementui社区疫情防控系统详细设计实现

博主介绍:✌公司项目主程、全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,CSDN博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计✌ 🍅文末获取联系🍅 精彩专栏推荐&…

基于Java+SpringBoot+vue+elementui药品商城采购系统详细设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ 🍅文末获取联系🍅 精彩专栏推荐👇&a…

嵌套页面h5怎么调起手机文件_让微信公众号文章排版像网页h5一样高大上

做过微信公众号文章排版的同学都知道,微信自己的排版工具只能排些简单的图文混合。遇到这种同况时,很多同学会考虑用第三方编辑器或直接用他们的模板,然后稍微改改便直接发布。 没有我想要的排版样式怎么办,可以自己设计吗&#x…

基于JavaSpringMVC+vue实现协同过滤电影推荐系统详细设计

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ 🍅文末获取联系🍅 精彩专栏推荐👇&a…

Java开源专业计算引擎:跑批真的这么难吗?

业务系统产生的明细数据通常要经过加工处理,按照一定逻辑计算成需要的结果,用以支持企业的经营活动。这类数据加工任务一般会有很多个,需要批量完成计算,在银行和保险行业常常被称为跑批,其它像石油、电力等行业也经常…

8a 中断 传感器采集_加速度传感器的安装,你get了吗

加速度传感器的安装方法不同,对频响曲线的影响也有差异。加速度传感器的固有频率是否发生变化,取决于使用的安装方法(手持、磁铁、胶水、螺栓等)。从表1可知,用螺栓安装在打磨良好的干净平面上时,频响最高,胶水和磁铁的…

基于Java+SpringBoot+vue+elementui农产品物流系统详细设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星TOP100、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ 🍅文末获取联系🍅 精彩专栏推荐👇&a…

评估指标_机器学习评估方法与评估指标总结

离线评估方法离线评估的基本原理是在离线环境中,将数据集划分为“训练集”和“测试集”,用“训练集”训练模型,用“测试集”评估模型,根据数据集划分方法的不同,离线评估可以分为以下3种。Holdout检验Holdout检验是基础…

猿创征文|基于Java+SpringBoot+vue学生学习平台详细设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业设计项目实战✌ 🍅文末获取联系🍅 精彩专栏推荐👇&#x1…

搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错

可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多…

win10 联想键盘快捷键关闭_这些Win10键盘快捷键你必须掌握,系统高手必备技能...

随着微软即将对win7停止支持以及官方对win10的大力推广,win10的用户越来越多,大家对它的大部分功能都慢慢熟悉了,如果你还只是会用ctrlc和ctrlv,那就说明你out了。我们会发现真正的高手都是用快捷键操作,用快捷键可以大…

ols残差_涨知识丨OLS原理的矩阵方法很难?Just So So

对计量经济学初学者而言,OLS原理的矩阵表示通常令人“发怵”。其原因主要在于,至少在财经类课程体系中,关于矩阵微分的先行课程是缺失的。鉴于计量经济学的进阶课程大多采用矩阵语言,笔者认为有必要专文论述如何“搞掂”关于OLS原…

asr语音转写_搜狗智能录音笔C1正式上市 语音转文字准确率达95%

中新网3月19日电 3月18日,搜狗旗下全新智能硬件——搜狗智能录音笔C1在搜狗商城、京东等平台正式发售。在当天的产品沟通会上,搜狗公司CTO杨洪涛表示,搜狗智能录音笔C1集成了搜狗的核心AI技术,能够有效提高用户的工作和生活效率。…

730阵列卡支持多大硬盘_华为1000多手机哪款好?推荐只此一款!华为品牌性价比最高千元机...

自荣耀品牌独立运营之后,华为品牌就主攻高端机型,其低端机型均交给荣耀品牌来运营。其实,华为品牌中端机型中,还是有几款性价比表现极为不俗的,比如中端性价比最高机型——华为nova 5Z,华为nova 5Z性价比直…

jsp 中div居中_让div在屏幕中居中(水平居中+垂直居中)

html代码<div class"main"><h1>测试</h1></div>方法一&#xff1a;div使用绝对布局&#xff0c;设置margin:auto,并设置top、left、right、bottom的值相等即可&#xff0c;不一定要都是0。方法二&#xff1a;绝对布局&#xff0c;用margin来…

使用eolink优雅地进行API接口管理

为什么使用eolink? 我们都知道在一个项目团队中是由很多角色组成的&#xff0c;例如&#xff1a;业务>产品>设计>前端>后端>测试等。每个角色各司其职&#xff0c;一起合作完成项目的生命周期。而前端与后端的沟通则是主要通过接口来实现&#xff0c;通过接口…

没有icon_ICON设计干货来啦~

​ICON设计是UI设计中非常重要的一个环节&#xff0c;它能够帮助我们美化画面&#xff0c;传递情绪&#xff0c;快速导航&#xff0c;而且不受语言限制&#xff0c;那今天就来给大家分享下ICON的设计干货。首先图标可以分为3大类&#xff1a;功能性图标 , 应用图标 , 创意图标。…