当前位置: 首页 > article >正文

kettle插件-高性能插入更新插件Upsert

场景:假如T日需要将a表中T-1日的数据同步到b表。由于某种业务需求a表中已经同步到b表中的数据发生了变化需要重新同步,这个时候就会用到插入更新插件,也就是

说a表中数据重新同步b表,若b表中存在此数据(根据唯一id)则执行更新操作,否则执行插入操作。

1、软硬件环境

本次教程基于本机docker版mysql 8.x数据库进行测试,如下图所示:

电脑是基于本人mac笔记本,配置如下:

 2、生成数据

使用表输出组件往t1(id,name,createtime)表中插入100条数据,采用单线程5000笔批量提交方式,速度在2.6w/s左右,如下图所示:

表输出步骤配置如下:

 初始化数据如下:

3、使用插入/更新步骤,存在数据则更新,不存在则插入新数据。如下图所示

性能非常差,原因是每次都需要将旧数据查出来,然后和新数据对比是否有变化,有则执行更新操作,无则插入数据。每条数据都要和数据库交互两次。

 数据更新如下:

4、使用自研Upsert组件,执行插入更新操作,如下图所示:

自研Upsert插件单线程速度在1.4W/s,之所以速度比原有插入/更新大幅提升,是因为Upsert处理每条数据时只需要和数据库交互一次。

这里验证的是假如每条数据都发生了变化,若有少量变化或者没变化速度将大幅提升。

Upsert配置如下:

更新数据如下:

数据没有变化是Upsert执行如下图所示:

注:本次测试结果是基于本地环境,开单线程的测试结果,若放到服务器上多线程模式速度会更快。

Done!!!


http://www.kler.cn/a/573679.html

相关文章:

  • ZT26 小球投盒
  • 网络安全需要掌握哪些技能?
  • 解决java-jar报错:xxx.jar 中没有主清单属性的方法
  • Linux断电重启后,硬盘挂载失败问题。
  • 解决新建小程序页面文字顶在顶部问题
  • Android开发Android调web的方法
  • 获取Kernel32基地址
  • Docker小游戏 | 使用Docker部署DOS游戏合集
  • SQL命令详解之常用函数
  • 虚拟网络IP设置
  • Python 面向对象编程-继承与多态
  • C#-泛型
  • 二、Redis 安装与基本配置:全平台安装指南 服务器配置详解
  • c++ cin输入流的使用总结
  • (YOLOv11)基于Vue Flask YOLOv11的水稻病害检测系统【含有数据大屏展示】
  • Logstash:数据搬运工的奇幻漂流
  • 苍穹外卖零碎知识点学习记录
  • 深入解析:使用Java爬虫获取淘宝商品详情高级版API接口
  • java常用注解(持续更新)
  • XS9935 ,4通道模拟复合视频解码芯片,双向音频数据同轴共缆传输