ormlite 批处理操作

简介: 提高ormlite的批处理速度 http://stackoverflow.com/quegoogstions/11761472/ormlites-createorupdate-seems-slow-what-is-normal-speed   This may be the "expected" speed unfortunately.

提高ormlite的批处理速度

http://stackoverflow.com/quegoogstions/11761472/ormlites-createorupdate-seems-slow-what-is-normal-speed

 

This may be the "expected" speed unfortunately. Make sure you are using ORMLite version 4.39 or higher. createOrUpdate(...) was using a more expensive method to test for existing of the object in the database beforehand. But I suspect this is going to be a minimal speed improvement.

If I create 100 new rows then the speed is even slower.

By default Sqlite is in auto-commit mode. One thing to try is to wrap your inserts (or your createOrUpdates) using the the ORMLite Dao.callBatchTasks(...) method.

In by BulkInsertsTest android unit test, the following doInserts(...) method inserts 1000 items. When I just call it:

doInserts(dao);

It takes 7.3 seconds in my emulator. If I call using the callBatchTasks(...) method which wraps a transactions around the call in Android Sqlite:

dao.callBatchTasks(new Callable<Void>() { public Void call() throws Exception { doInserts(dao); return null; } });

It takes 1.6 seconds. The same performance can be had by using the dao.setSavePoint(...)method. This starts a transaction but is not as good as the callBachTasks(...) method because you have to make sure you close your own transaction:

DatabaseConnection conn = dao.startThreadConnection(); Savepoint savePoint = null; try { savePoint = conn.setSavePoint(null); doInserts(dao); } finally { // commit at the end conn.commit(savePoint); dao.endThreadConnection(conn); }

This also takes ~1.7 seconds.

 

 dao.setsavePoint开始一个事务,但不如callBachTasks(...)方法,因为你必须确保你闭上你自己的事务:

 

相关文章
|
4月前
|
算法 Java 数据处理
Dating Java8系列之并行数据处理
Dating Java8系列之并行数据处理
34 0
|
4月前
|
数据库连接 数据库
kettle开发篇-数据库查询
kettle开发篇-数据库查询
48 0
|
4月前
kettle开发篇-空操作
kettle开发篇-空操作
37 0
|
9月前
|
缓存 关系型数据库 MySQL
Typeorm连接mysql查询数据时如何优化
连接MySQL并优化查询速度是一个复杂的过程,我们可以通过优化检查大大提升接口响应速度
289 0
|
10月前
|
Java
Java8流式操作——中间操作
imit:限制,只取流中前指定位的元素。从前往后数,只取前xxx个元素
|
SQL 存储 Java
Java 结构化数据处理开源库SPL,再也不用苦哈哈写SQL了
现代Java应用架构越来越强调数据存储和处理分离,以获得更好的可维护性、可扩展性以及可移植性,比如火热的微服务就是一种典型。
142 0
|
SQL Java 关系型数据库
|
程序员 数据库 关系型数据库