Kettle最佳实践二十条

Posted on Posted in kettle经验分享

一、当输入对象为CSV文件时,将NIO Buffer Size从默认的50000改到最佳的200000。 

    二、当输出对象为表输出时,将提交记录数量从默认的1000改到最佳的4000。 

   三、尽可能关闭转换过程中一切与数据库相关的日志,如表日志、索引日志等。 

    四、在数据库去重时,使用普通索引而不是唯一性索引。 

    五、在插入数据之前,先使索引unusable,数据导完之后再rebuild索引。需要注意的是,像数据库去重这种需要索引来优化查询速度的情况可以排除在外。 

    六、索引和表数据使用不同的表空间,尽可能的减少IO争用。 

    七、Kettle所在操作系统优先选择Windows,在有些情况下Linux的插入速度明显偏低。 

    

    八、尽量使用数据库连接池 

    九、尽量提高批处理的'commit size' 

    十、尽量使用缓存,缓存尽量大一些 

   十一、Kettle 是Java 做的,尽量用大一点的内存参数启动Kettle. 

    十二、可以使用sql 来做的一些操作尽量用sql 

   十三、 'Group , merge , stream lookup ,split field' 这些操作都是比较慢的,想办法避免他们。 

   十四、插入大量数据的时候尽量把索引删掉 

十五、尽量避免使用update , delete 操作,尤其是update , 如果可以把update 变成先delete ,后insert。

十六、能使用truncate table 的时候,就不要使用delete all row 这种类似sql

十七、如果删除操作是基于某一个分区的,就不要使用delete row 这种方式(不管是delete sql 还是delete 步骤),直接把分区drop 掉,再重新创建

十八、尽量缩小输入的数据集的大小(增量更新也是为了这个目的)

十九、尽量使用数据库原生的方式装载文本文件(Oracle 的sqlloader , mysql 的bulk loader 步骤)

二十、尽量不要用kettle 的calculate 计算步骤,能用数据库本身的sql 就用sql ,不能用sql 就尽量想办法用procedure , 实在不行才是calculate 步骤。