论坛首页 Java企业应用论坛

10倍以上提高Pentaho Kettle的MySQL写入速度

浏览 21774 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-07-22  

 

使用Pentaho Kettle做了个数据抓取入库的程序,大致这个样:



    使用文本调测的时候,速度大概7500条/秒,但是换上数据库后,速度只有150条/秒,对于20万左右的数据入库要超过20分钟,这让人没法接受。

   使用批量插入好像也没什么效果,依然慢



 求助Google,找到了2个参考:

   参考1:http://julienhofstede.blogspot.nl/2014/02/increase-mysql-output-to-80k-rowssecond.html

   参考2:http://forums.pentaho.com/showthread.php?142217-Table-Output-Performance-MySQL#9

   

描述的基本一致,根据参考调整了连接参数:

useServerPrepStmts=false
rewriteBatchedStatements=true
useCompression=true

  数据写入速度马上提升到2300条/秒左右,开3个线程,写入速度就与文本写入差不多了。

 

  也算写了很长时间的代码,使用Kettle也算有一段时间,一般只是关注Tranaction如何实现功能,对连接参数可以说基本不关注,但这样的速度提升摆在面前,不熟悉这些性能参数,要想提高性能还真的不容易,写出来也是希望碰到相同问题时能有点参考,因为使用百度,完全搜索不到^_^,写点中文的,希望能被收录

 

 

  • 大小: 73.7 KB
  • 大小: 102.1 KB
   发表时间:2014-07-28  
哥们,对你这个抓取数据的过程和ktrl文件非常感兴趣,方便讲解分享一下吗
0 请登录后投票
   发表时间:2014-07-28  
文件作为附件上传了,记得把Jsoup的jar包放到kettle的libext目录,另外抓取的不是公网上的数据,可能直接跑不起来,但代码可以参考的
0 请登录后投票
   发表时间:2014-07-28  
看一下mysql jdbc驱动的源代码就清楚了,你不加rewriteBatchedStatements这个参数的时候,java代码写的是用batch执行的,实际上它给你放到一个ArrayList中,然后在你executeBatch的时候再从这个list中取出来一条一条的发送。  等于是没有batch的作用。

你这个是msyql批量insert的话题, 和帖子主题里的pentaho kettle没什么关系。
任何需要msyql批量insert的场景都适用。
1 请登录后投票
   发表时间:2014-07-29   最后修改:2014-07-29
我用batch save 效果很好。20万条 1分钟左右。
估计你是什么批量参数忘了配置吧。
0 请登录后投票
   发表时间:2014-08-03  
ThinkingQuest 写道
看一下mysql jdbc驱动的源代码就清楚了,你不加rewriteBatchedStatements这个参数的时候,java代码写的是用batch执行的,实际上它给你放到一个ArrayList中,然后在你executeBatch的时候再从这个list中取出来一条一条的发送。  等于是没有batch的作用。

你这个是msyql批量insert的话题, 和帖子主题里的pentaho kettle没什么关系。
任何需要msyql批量insert的场景都适用。


是的,是个JDBC的连接参数,刚好在这么个场景下能体现出参数的效果,算借kettle之名吧
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics