0
我正在使用ibatis for my sql insert stmt。在我的代码中,我从文件夹中逐行解析文件。每条符合条件的行都需要插入到数据库中。 程序的一次运行中插入的总数可以是任何沿着200k的地方。ibatis:提高插入性能
SqlSession sess = null;
this.sess = sf.openSession(ExecutorType.BATCH, false);
for (each file) {
for(each line matching criteria){
this.sess.insert("com.logs.util.insertFileInfo", fileData);
insertcount++;
if(insert count == 10)
this.sess.commit();
}
}
if(insert count > 0){
this.sess.commit();
}
}
此风格缓慢占用大量内存,并在某些时候抛出OutOfMemory异常。 如何提高性能?
刚刚更新了算法 – changed 2010-10-19 16:26:42
随着这一改变,你会在前10行之后提交,然后在每个文件之后提交是否需要提交;它听起来并不正确。如果一个文件包含(说)50K行,那么这些50K项目将不得不被缓冲在某处。它们将由Ibatis,底层JDBC驱动程序或DBMS保留。如果您使用mod运算符(%),那么您将永远不会缓冲超过10个挂起的更改。另外,不要忘记在外部循环完成后提交会话。 – PhilDin 2010-10-19 16:43:51