教你如何解决T+0的问题

如何,解决,问题 · 浏览次数 : 452

小编点评

## SPL 解决 T+0 查询问题 **摘要:** SPL 是一个开源数据计算引擎,可以帮助解决 T+0 查询问题。SPL 使用跨数据库计算能力和高效的存储技术,可以快速执行 T+0 查询。 **主要功能:** * 支持多种数据源的混合计算 * 提供多种计算性能提升技术 * 能够从文件和数据库中进行混合计算 * 拥有高效的存储格式支持 **主要技术:** * SPL 是基于 Java 的开源数据计算引擎 * 支持 SQL 和 NoSQL 数据源 * 提供多种高效的存储格式 * 提供多种计算性能提升技术 * 支持并行计算 **主要应用场景:** * 高性能数据处理 * 实时数据分析 * T+0 查询 **优点:** * 高性能 * 可扩展性 * 低成本 * 减少数据库连接 **缺点:** * 依赖开发人员的专业知识 * 需要对数据源进行配置

正文

摘要:T+0查询是指实时数据查询,数据查询统计时将涉及到最新产生的数据。

本文分享自华为云社区《大数据解决方案:解决T+0问题》,作者: 小虚竹 。

T+0问题

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

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

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

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

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

引入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实现很简单,这里看一个例子。

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

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

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

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

高性能

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

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

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

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

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

这里的语句中没有排序字样,也不会产生大排序的动作,在全集还是分组中计算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查询利器。

参考资料

 

点击关注,第一时间了解华为云新鲜技术~

与教你如何解决T+0的问题相似的内容:

教你如何解决T+0的问题

摘要:T+0查询是指实时数据查询,数据查询统计时将涉及到最新产生的数据。 本文分享自华为云社区《大数据解决方案:解决T+0问题》,作者: 小虚竹 。 T+0问题 T+0查询是指实时数据查询,数据查询统计时将涉及到最新产生的数据。在数据量不大时,T+0很容易完成,直接基于生产数据库查询就可以了。但是,

解决 Xshell 无法使用 zsh 的 prompt style

为了更好的阅读体验,请点击这里 先学习一下 zsh 的配置吧~ 参考资料 从 0 开始:教你如何配置 zsh powerlevel10k 如何给 Xshell 配置呢 当我安装完 oh-my-zsh、powerlevel10k、fast-syntax-highlighting、以及若干(powerl

五分钟教你使用GitHub寻找优质项目

前言 经常会有同学会问如何使用GitHub找到自己想要的项目,今天咱们就出一期快速入门教程五分钟教你使用GitHub寻找优质项目。GitHub作为世界上最大的项目开源平台之一,上面有着无数优质的开源项目。善于使用它能够让你获得很多意想不到的惊喜。 首先解决访问慢的问题 FastGithub是GitH

教你如何搞定springboot集成kafka

本文分享自华为云社区《手拉手入门springboot+kafka》,作者:QGS。 安装kafka 启动Kafka本地环境需Java 8+以上 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 Kafka启动方式有Zookeeper和Kraft,两种方式只

教你如何轻松搞定云上打印管理

摘要:加快自主创新,满足数字化用户多场景文印需求。 本文分享自华为云社区《有了司印云打印,云上打印管理轻松搞定!》,作者:云商店 。 作为与职场和个人办公息息相关的工作场景,打印长期以来都是办公业务的核心应用和基本能力之一,即使在移动办公、云办公的时代仍然如此。 当前,市面上的打印机品牌型号差异大,

教你如何进行数仓字符串、二进制、十六进制互转

现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在GaussDB(DWS)中,进制转换是非常方便的。

教你如何通过CodeArts IDE插件调用API,高效合成语音

摘要:本实验基于华为云自研CodeArts IDE,指导用户通过使用华为云API,来实现一个文字合成语音的应用。 本文分享自华为云社区《通过CodeArts IDE插件调用API,高效合成语音!》,作者:华为云PaaS服务小智。 实验内容: CodeArts IDE定位华为云开发者桌面,是利用华为自

教你如何用Vue3搭配Spring Framework

摘要:在本文中,我们将介绍如何使用Vue3和Spring Framework进行开发,并创建一个简单的TodoList应用程序。 本文分享自华为云社区《Vue3搭配Spring Framework开发【Vue3应用程序实战】》,作者:黎燃。 一、介绍 Vue3和Spring Framework都是现

手把手教你如何在报表中查询数据

每周一个报表小技巧:如何在报表中引入数据筛选功能 >摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:[葡萄城官网](https://www.grapecity.com.cn/),葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 # 前言篇 在当今信息爆炸的时代,面对海量的

还在手动发早安吗?教你用java实现每日给女友微信发送早安

摘要:教你如何用java实现每日给女友微信发送早安等微信信息。 本文分享自华为云社区《java实现每日给女友微信发送早安等微信信息》,作者:穆雄雄 。 前言 据说这个功能最近在抖音上很火,我没有抖音,没有看到。 但是我在网上看了,相关案例确实很多,但是大家都是借助于了微信服务号,在我看来,效果很不佳