Kettle 解决数据同步缓慢及性能效率问题 (数据同步利用时间戳解耦,性能通过配置优化提升90%)

一. 介绍

在数据同步过程中,缓慢的同步速度和低效率的性能往往是令人头痛的问题。本文将介绍如何通过Kettle解决数据同步缓慢及性能效率问题,其中主要涉及数据同步利用时间戳解耦和通过配置优化提升性能高达90%的方法 。


在先前的博客文章中,我们配置了Kettle在Docker中的部署过程,以及如何配置和运行Sqlserver到Mysql的数据同步任务。同时结合Start定时任务,实现定时调度的功能,确保数据同步任务的稳定运行。

Kettle-Docker部署+Sqlserver数据同步Mysql+Start定时任务-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_56659620/article/details/135816290?spm=1001.2014.3001.5501


二. 数据同步-时间戳解耦

源数据表中有一个字段会记录数据的新增或修改时间,可以通过它对数据在时间维度上进行排序。通过中间表记录每次更新的时间戳,在下一个同步周期时,通过这个时间戳同步该时间戳以后的增量数据。这是时间戳增量同步

总体步骤如下:

1. 为了解决当表数据同步之后再次执行效率低下问题,我们先创建一个时间戳表来保存每次插入最后一条数据时间 (如果表不存在的时候会创建,数据同步执行完成更新表里时间)

# sql 如下​​​​
CREATE TABLE IF NOT EXISTS etl_temp(id int primary key,time_stamp timestamp);
INSERT IGNORE INTO etl_temp (id,time_stamp) VALUES (1,'2018-05-22 00:00:00');

2. 新建一个转换,查询时间表里时间作为环境变量

 表输入

# sql如下
select date_format(time_stamp , '%Y-%m-%d %H:%i:%s') time_stamp from etl_temp where id='1'

设置变量

将此转换保存到自定位位置,之后任务执行时候进行导入

3. 新建数据同步转换(数据清洗)

 原始表输入

# '${TIME_STAMP}' 为配置的时间戳表内的时间,我们将它作为了环境变量
WHERE CREATETIME > '${TIME_STAMP}';

目标表同理

字段选择步骤

合并记录步骤

数据同步步骤

将此转换保存到自定位位置,之后任务执行时候进行导入

4. 当我们执行完数据同步(清洗)步骤,把同步完数据表最后一条数据更新到时间戳表,通过这个时间戳同步该时间戳以后的增量数据。

# sql 如下
set @new_etl_start_time_stamp = (SELECT CREATETIME FROM ciiisp_safety.t_sensordefine_his ORDER BY CREATETIME DESC LIMIT 1);
update etl_temp set time_stamp=@new_etl_start_time_stamp where id='1';

任务执行完成

三. 性能配置优化

  • 索引优化: 确保数据库表的关键字段建立了合适的索引,加速数据检索和更新操作,提升同步性能。

  • 缓存机制: 使用Kettle的缓存机制,将常用的数据缓存在内存中,减少对数据库的频繁访问,提高同步效率。

(1)配置修改:数据库选项修改提升性能

命名参数                                     值
rewriteBatchedStatements                                     true
defaultRowPrefetch                                     200
useCompression                                     true
useServerPrepStmts                                     false

测试结果 (平均每秒接近三万,跟网速带宽有影响)

(2)批处理优化:调整同步任务的批处理大小,合理配置每批次同步的数据量,以减小数据库负载和提高同步效率

(3) 并行处理: 利用Kettle的并行处理能力,将同步任务拆分成多个子任务并行执行,充分利用系统资源,提升同步速度。

总体而言,Kettle作为一款强大的ETL工具,在数据同步方面具有丰富的功能和配置选项,通过巧妙地利用时间戳解耦和配置优化,我们能够更好地应对数据同步的挑战,提高同步效率,保障数据的及时性和准确性。

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

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

相关文章

LabVIEW风力发电机在线监测

LabVIEW风力发电机在线监测 随着可再生能源的发展,风力发电成为越来越重要的能源形式。设计了一个基于控制器局域网(CAN)总线和LabVIEW的风力发电机在线监测系统,实现风力发电机的实时监控和故障诊断,以提高风力发电的…

Vue.js设计与实现(霍春阳)

Vue.js设计与实现 (霍春阳) 电子版获取链接:Vue.js设计与实现(霍春阳) 编辑推荐 适读人群 :1.对Vue.js 2/3具有上手经验,且希望进一步理解Vue.js框架设计原理的开发人员; 2.没有使用过Vue.js,但对Vue.js框架设计感兴趣…

个性化DIY制作硬模空心耳机壳使用什么?

制作硬模空心耳机壳需要使用到以下工具和材料: 硬质材料:如金属、塑料、UV树脂胶液等,用于制作耳机壳的硬质部分。模具:用于制作耳机壳的形状和尺寸,可以使用塑料、金属等材料制作模具。连接器和线材:用于…

AES加密原理

AES是一个迭代的、分组密码加密方式,可以使用128 、192和256位密钥。与 公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。 通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结 构,在该循环中重…

vue3项目中如何实现图片的二次处理

在说这个之前,我们要先理解图片的二次处理与图片压缩之间的差异。 图片的二次处理除了对图片进行压缩,还可以进行更多特效的处理,可以对图片进行宽高的重设,图像位置适应性调整,清晰的的控制,背景颜色的添…

90.网游逆向分析与插件开发-游戏窗口化助手-项目需求与需求拆解

内容参考于:易道云信息技术研究院VIP课 上一个内容:实现物品使用策略的功能-CSDN博客 项目需求: 在游戏窗口化时,可以在游戏之外弹出一个窗口,可以隐藏或者显示游戏窗口,显示游戏人物的基本状态&#xff…

CMake生成osg的FFMPEG插件及Windows下不生成VS工程问题解决

在Windows下,如何利用CMake生成osg的FFMPEG插件,请参考如下博文,同生成jpeg插件类似: osg第三方插件的编译方法(以jpeg插件来讲解)。 如下为生成FFMPEG时必要的设置: 注意: 一定要…

【蓝桥杯】环形链表的约瑟夫问题

目录 题目描述: 输入描述: 输出描述: 示例1 解法一(C): 解法二(Cpp): 正文开始: 题目描述: 据说著名犹太历史学家 Josephus 有过以下故事&a…

指针详解(3)

各位少年,大家好,我是博主那一脸阳光,今天介绍 二级指针 指针数组,还有个指针数组模拟二维数组。 前言:在浩瀚的C语言编程宇宙中,指针犹如一把打开内存世界大门的独特钥匙,它不仅是理解程序运行…

红日靶场1搭建渗透

环境搭建 下载好镜像文件并解压,启动vmware 这里我用自己的win7 sp1虚拟机作为攻击机,设置为双网卡NAT,vm2 其中用ipconfig查看攻击机ip地址 设置win7 x64为双网卡,vm1,vm2 设置win08单网卡vm1,win2k3为单…

抖音下载emoji表情包

1.效果如图所示 2.代码如下 注意替换自己的cookie import requests import json import osurl "https://www.douyin.com/aweme/v1/web/emoji/list?device_platformwebapp&aid6383&channelchannel_pc_web&publish_video_strategy_type2&pc_client_type1…

20240203在WIN10下安装Miniconda

20240203在WIN10下安装Miniconda 2024/2/3 21:06 缘起:最近学习stable-diffusion-webui.git,在Ubuntu20.04.6下配置SD成功。 不搞精简版本:Miniconda了。直接上Anacoda! https://www.toutiao.com/article/7222852915286016544/ 从…