我有一个程序在本地SQLite数据库中执行少量插入(可能大约3000),但所有原始数据库访问都由ORMLite包装。我的问题是插入率非常低,大约每秒25次插入。另一个StackOverflow问题迫使我强迫代码使用事务,所以我读了ORMLite文档。
在ORMLite文档之后,我将代码更改为以下内容:
// Wrap all the inserts in a batch for increased speed.
Section.getDao().callBatchTasks(
new Callable<Void>() {
@Override
public Void call() throws Exception {
int currFileNum = 0;
// For each file, extract its sections.
for (HtmlFile file : files) {
String sectionString = file.getTitle();
String[] path = StringUtils.split(sectionString, ",");
Section.createFromPath(path, file.getId()); // Performs 1-5 Section.create() statements for each html file processed.
}
return null;
}
});
此代码实际上不会影响插入速度。我也尝试使用TransactionManager.callInTransaction()
代码,同样根据ORMLite文档,但这对提高速度没有任何作用。
答案 0 :(得分:0)
我的问题是插入率非常低,大约每秒25次插入。
所以你说你要在SQLIte数据库中添加3000条记录,这需要2分钟才能完成?那真的很慢。你确定没有别的东西需要时间吗?您是否尝试过评论数据库调用并检查性能?
您可以尝试在3000之前关闭自动提交,然后再将其打开,而不是在事务中执行每个块。如下所示:
try {
dao.setAutoCommit(false);
...
insertBunchOfEntries();
...
} finally {
dao.setAutoCommit(true);
}