Joiner组件在运行时需要额外的内存空间处理中间结果,因此会影响性能
可通过查看Joiner performance计数器来决定Joiner组件是否需要优化

通过如下方式优化Joiner组件
  将Master Source指定为具有较少重复键值的Source
    以Joiner组件的join条件作为group key对数据进行分组,去重后的数据可以作为唯一键值
    当Integration Service处理排序后的joiner转换时,它会每次缓存符合100个键的行
    如果Master Source包含多个具有相同键值的行,Integration Service必须缓存更多的行,并且性能可能会降低

    比如,join条件是Master.id=Detail.id and Master.name=Detail.name, 则连接条件是id,name
    然后Integration Service会执行select id,name from Master group by id, name,其结果集就是唯一键值对的结果集
    Integration Service每次会从上述结果集中选出100个(id,name)对,并将符合该100个(id,name)对的记录写入缓存
    如果Master中符合这100个(id,name)对的记录有越多,则写入缓存的数据量就越大,则性能就会越慢

  将Master Source指定为行数较少的源
    在session运行时,Joiner组件将Detail Source的每一行与Master Source进行比较
    Master Source的行数越少,连接比较的迭代次数就越少,性能就越好
    同理,Detail Source的行数越少,每次迭代时遍历的次数也越少

  尽可能在数据库端进行join操作
    将join操作放在数据库端而不是在session里会提高性能
    但有时需要join不同数据源,如平面文件,不同类型数据库,此时需要在session里进行join操作
    join的类型同样也会对性能有影响,normal join的性能优于outer join并且返回相对较少的记录数

    可通过如下方式在数据库端进行join:
      配置pre-session store procedure,在存储过程里进行数据库表的join操作
      Source Qualifier的sqlquery里写脚本进行数据库表的join操作

  join之前尽可能对input数据排序
    如果input数据排过序,则将磁盘读写最小化,因而提高了性能
    如果input数据没有排过序,则可将Master Source的记录数尽量减少

优化之Joiner组件的更多相关文章

  1. 15、Jdbc的优化(BeanUtils组件)

    Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1    简介 程序中对javabean的操作很频繁, 所以apach ...

  2. vue组件化之模板优化及注册组件语法糖

    vue组件化之模板优化及注册组件语法糖 vue组件化 模板 优化  在 https://www.cnblogs.com/singledogpro/p/12054895.html 这里我们对vue.js ...

  3. 优化之Aggregator组件

    Aggregator组件通常会降低性能,因为它们必须在处理数据之前对数据进行分组 Aggregator组件需要额外的内存来保存中间组结果 通过如下方式对Aggregator组件进行优化 简化group ...

  4. java jdbc的优化之BeanUtils组件

    1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apache提供了一套开源的api,方便对javabean的操作!即BeanUtils组件. BeanUtils ...

  5. 优化之XML组件

    可在XML Parser 组件和XML Source定义中删除非project group,因为不需为这些非project group分配内存,但需要维护主键外键约束 ________________ ...

  6. 优化之Normalizer组件

    Normalizer会产生记录,尽可能的将Normalizer组件靠近Target ---------------------------------------------------------- ...

  7. 注册界面的优化之ActionBar组件的应用之(二)ActionBar组件的事件处理

    开发步骤: 重写父类中的一个方法onOptionsItemSelected实现ActionBar中的选项单击事件 //Register_Activity.java public class Regis ...

  8. 注册界面的优化之ActionBar组件的应用之(一)ActionBar组件的布局实现

    开发步骤:  在res下menu文件夹中创建一个actionbar_menu_register.xml菜单资源文件  在资源文件中添加标签设置一个或多个ActionBar功能选项 //action ...

  9. 性能调优之Transformation

    优化之Aggregator组件 优化之Custom组件 优化之Joiner组件 优化之Lookup组件 优化之Normalizer组件 优化之Sequence Generator组件 优化之Sorte ...

随机推荐

  1. Flume-ng高可用集群负载安装与配置

    1. 写在前面 flume-ng高可用长在大数据处理环节第一个出现,对于处理日志文件有很好的作用,本篇博客将详细介绍flume-ng的高可用负载均衡搭建 2. flume-ng高可用负载均衡描述 在一 ...

  2. Linux计划任务及压缩归档

    计划任务介绍 自动执行,备份数据. crontab    和   at : at:它是一个可以处理仅执行一次就结束的指令 crontab:它是会把你指定的工作或任务,比如:脚本等,按照你设定的周期一直 ...

  3. 普通用户添加sudo权限

    1.切换超级用户 su - root 2.编辑配置文件 vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(AL ...

  4. 如何在HTML表格里定位到一行数据

    业务需求: 在这样一个表格里,通过点击"确认"按钮,收集该行数据,向后台发送请求 解决办法 以该button为锚获取父节点,再由父节点获取各个元素的值 获取子元素又有很多办法,包括 ...

  5. Python操作Excel, 开发和调用接口,发送邮件

    笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...

  6. [JZOJ3615]【NOI2014模拟】数列(平面几何+二维线段树)

    Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|. 你需要写一个程序支持2种操作(k都是正 ...

  7. c#几种随机数组和数组乱序

    相关资料MSDN:RNGCryptoServiceProvider   Random   Guid private static RNGCryptoServiceProvider rngCsp = n ...

  8. PHP调用微信wx_JSSDK录音并播放,

    <?php require_once "jssdk.php"; $jssdk = new JSSDK("wx7a862ec806328ca2", &quo ...

  9. 配置Https 和 HSTS

    1. 视频 https://www.bilibili.com/video/av33344382/?p=2 using System; using Microsoft.AspNetCore.Builde ...

  10. word文档最上面有一条不是页眉的线

    word2013文档最上面有一条不是页眉的线 在编辑Word文档时发现文档上面出现了一条实线,而且并非页眉,这里我采取了一个方式: 找到[设计]---[页面边框] 找到[边框和底纹]----[页面边框 ...