数据同步写Oracle表耗时25分钟缩短到23秒——SeaTunnel性能优化
本文主要给大家介绍JDBC Source批处理任务动态切分优化,希望大家批评指正
JDBC Source 如果配置了table_path
和 partition_column
,引擎会对数据进行动态切分,可以通过分析样本数据优化切分区间,规避数据倾斜问题。
目前发现任务即使配置了where_condition
,动态切分算法仍然会把数据进行全表切分,在从大表中读取少量数据的场景下,任务切分阶段会耗费大量的时间,需要修改下面相关的流程进行优化。
下面所有出现SQL语句的地方均以MySQL为例子进行说明,具体不同的数据源有不同的子类方法overwrite
实现。
数据切分主流程
数据动态切分的代码入口位于DynamicChunkSplitter
类中的splitTableIntoChunks
方法,流程图中标红的方框表示需要修改的部分,详细在下面的子流程中展开说明。
查询最大最小值
需要加上Source的where_condition
配置的判断和拼接。
通用字段切分
查询数据总条数部分
(1)增加且where_condition
配置为空才走"是"的分支
(2)修改"否"分支,增加where_condition
的判断和对应查询语句的拼接,子查询和表查询的规则如下:
-
如果配置了Query则查询SQL为
SELECT COUNT(*) FROM (<子查询>) T
-
否则查询SQL为
SELECT COUNT(*) FROM <表名>
-
如果配置了
where_condition
则拼接到末尾
切分数据区间部分
详情见子流程
分页查询分片
查询下一个分片的结束边界nextChunkEnd
1.max查询部分
判断如果配置了where_condition则在limit那层查询添加条件拼接
2.min查询部分
判断如果配置了where_condition则添加条件拼接
样本查询分片
判断如果配置了where_condition
则添加条件拼接
日期字段切分
复用了通用字段切分
的1部分,只需修改一次即可。
分片使用流程
这里相关的流程不需要修改,这里分析是为了弄清楚分片是如何被使用的,以评估前面修改的必要性、正确性和风险。
数据被切分为分片后会被分发到Worker的SourceSeaTunnelTask
中,最终在JdbcInputFormat
类的open
方法中被使用,主要流程如下
由上面流程可知,由分片生成的SQL在最后会判断拼接where_condition
,如果在生成分片的阶段没有考虑where_condition
,则生成的分片中可能有部分分片在追加上where_condition
条件限制后查询不到数据,当这样的分片很多时,不但会影响分片切分的性能,也会影响数据读取的性能,因为过程中产生了大量的无效查询。
优化效果
优化之后本地测试从一个55G的MySQL表使用where_condition
过滤读取多条数据的耗时从25分钟缩短到23秒。
提交的PR链接:https://github.com/apache/seatunnel/pull/8760
本文由 白鲸开源科技 提供发布支持!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
大模型时代的内容分析Agent解决方案与业务实践
一种新的商品表现形态,内容几乎存在于手淘用户动线全流程,例如信息流种草内容、搜索消费决策内容、详情页种草内容等。通过低成本、高时效的AIGC内容生成能力,能够从供给端缓解内容生产成本高的问题,通过源源不断的低成本供给倒推消费生态的建立。过去一年,我们通过在视频生成、图文联合生成、个性化文案、人设Agent等核心技术上的持续攻关,AIGC内容生成在手淘多个场景取得了规模化落地价值。本专题《淘宝的AIGC内容生成技术总结》是我们摸索出的一部分实践经验,我们将开启一段时间的内容AI专题连载,欢迎大家一起交流进步。 第一篇《淘宝内容AI团队2024年8篇论文总结》 第二篇《内容AI: 目标驱动的图像生成》 第三篇《OpenAI o1模型的前世今生》 第四篇《多模态人物视频驱动技术回顾与业务应用》 第五篇《视频级虚拟试衣技术在淘宝的产品化实践》 概述 在当今的电商环境中,内容化已经成为淘宝的一大战略。无论是在站内通过图文和视频形式,作为商品的展示载体,促进用户的消费转化;还是在站外投放的广告内容,吸引用户进入淘宝,实现用户增长,内容的力量都不可忽视。 然而,许多内容创作者——包括KOL、商家、甚...
- 下一篇
谁动了我的SunEC?——记深夜排查SSL握手失败的惊魂一小时
文章首发公众号『风象南』 问题初现 某日下午,正在进行一个项目沟通会,团队A同学找到我 "昨天说的那个功能做好了,验证了下基本流程没问题,但是测试过程发现个问题,就是调用完我新加的那个方法后再次访问界面就失败了,服务端口、进程资源啥的都正常,我分析了下,暂时没找到问题,但是重启服务后再访问界面就没有问题。" 又说道:"新增的那个方法不是经常调用,也就配置初始化时候调一下,影响不大,这个问题要不要解决。" 我说:"那得解决呀,没找到问题原因你就不确定什么时候会再次发生,即使重启正常了,可能运行一会或者操作个啥就又出问题了,另外,万一这个问题影响的不止这一处不就是留了个大坑,你再去查查看,如果没解决我等会开完会一起看看"。 排查定位 然后我接着开会,随后又准备了一些项目材料、设计文档,忙完这些已经是晚上10:00了。 突然想起来中午A同学的那个问题,过去看了下A同学还在工位,我过去问了下 "找到问题了吗 ?" A同学说:"还没有找到,他看了代码好像没什么问题,不知道是不是其他人提交的代码影响的。" 接着翻起了代码提交记录。 我说:"错误提示是什么,异常信息给我看下。" A同学说:"服务端没...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19