一度に 100000 レコードを android sqlite データベースに挿入しようとしています。私は次の2つの異なる方法を使用しています。
private void bulkInsertDataBySavePoint(final List<User> users) {
log.debug("bulkInsertDataBySavePoint()");
DatabaseConnection conn = null;
Savepoint savepoint = null;
try {
conn = userDao.startThreadConnection();
savepoint = conn.setSavePoint("bulk_insert");
for (User user : users) {
userDao.create(user);
}
} catch (SQLException e) {
log.error("Something went wrong in bulk Insert", e);
} finally {
if (conn != null) {
try {
conn.commit(savepoint);
userDao.endThreadConnection(conn);
} catch (SQLException e) {
log.error("Something went wrong in bulk Insert", e);
}
}
}
}
と
private void bulkInsertDataByCallBatchTasks(final List<User> users) {
log.debug("bulkInsertDataByCallBatchTasks()");
try {
userDao.callBatchTasks(new Callable<Void>() {
@Override
public Void call() throws Exception {
for (User user : users) {
userDao.create(user);
}
return null;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
どちらの方法も正常に機能します。平均して 140 秒かかり、60 ~ 65% の CPU を使用しますが、これは問題ないと思います。
アイデアは、json データを提供する API を消費する必要があるということです。そのjsonデータを解析してから、オフラインで使用するためにsqliteデータベースに挿入する必要があります。
この問題を解決する効率的な方法を探しています。
何か考えはありますか?