所有由雷老虎发布的文章

[电影] 源代码

最近看了科幻电影《源代码》,讲的是一个战士只有脑部能够活动,其他部分都已经死亡。科学家通过技术手段把他的大脑链接到一场火车爆炸前的另一个人的大脑上,要求他在火车爆炸前的几分钟内找到肇事者,他一遍又一遍地回到过去,终于找到真凶,避免了一连串的灾难,而历史也因此发生了改变 继续阅读[电影] 源代码

Export ADO DataSet to Excel file with Delphi

最近在用Delphi做一个小工具,需要把ADO的数据导出到Excel文件中。
已经实现了一个笨办法,按行、列嵌套循环使用OLE对象访问的方法把数据写到每个单元格,实现起来很简单,但有一个很明显的问题:效率太低;当有20个字段*8000条记录的数据量时,需要差不多十分钟左右,追求完美的我无法接受这样的现实,于是开始寻找解决方案。 继续阅读Export ADO DataSet to Excel file with Delphi

Kettle运行限制

Kettle是一个应用广泛的ETL工具,支持大数据量肯定是没有问题的,但是最近在做一个项目时,压力测试阶段总是出现莫名奇妙的问题,经过不懈努力总算是解决了,下面把遇到的问题介绍如下,供兄弟姐妹们参考:

1. 运行过程中收到 java.lang.OutOfMemoryError: Java heap space 错误
这个错误主要是Java的内存不足(heap space:堆空间)造成的,这个问题有时候无法避免,因为数据量就是那么大。解决这个问题有两个方向:
a. 给Java分配更多的内存,方法是:打开kitchen.sh/kitchen.bat,找到”OPT=”$PENTAHO_DI_JAVA_OPTIONS -cp …… ” 改为”OPT=”-Xmx4096m -cp …… ”
看到了吗,缺省512m,我一狠心给它改成了4096m,就是4G啦。我手头的这个服务器有64G的物理内存,改成4G不过分吧?所以用这个方法就已经无敌了。
b. 把“源数据库->目的数据库”的转换(Transformation)拆分为“源数据库–>文本文件”和“文本文件–>目的数据库”两个转换。(尚未试验,但据下面的这个帖子所述应该可以解决问题:http://forums.pentaho.com/archive/index.php/t-68806.html

2. 没有错误,运行到读或者写数据时一直在等待,小数据量没问题,大数据量才会出现问题
这个问题确实很费解,经过n多试验发现了问题的根源在Transformation的设置,如下图所示,要把Nr of rows in rowset设置为足够大,最好是你能用到的数量级后面加个0吧。我试验的是15W左右的数据,但是当时的设置时10W,我发现目的数据库的数据量停留在了100001不再增加了,于是就联想到了好像在这个界面看到了一个100000的东东,无论多么费劲吧,问题解决了总是值得欣慰的。猜想一下这个设置,可能是Kettle的设计者希望能预先知道最大会有多少数据,以便做相应的准备工作吧。另外,顺便说一下这个窗口里面的Feedback size,指每多少条记录会有一个信息提示出来,以便你知道进度。