Оптимизация пакетных вставок, SQLite
Я играю с буфером разного размера, который нужно вставить в локальную базу данных SQLite, и обнаружил, что вставка 10 000 000 строк данных занимает около 8 минут, когда размер буфера равен 10 000. Другими словами, для хранения всего требуется 1000 записей.
8 минут на хранение 10 000 000 кажется слишком длинным (или это?)
Можно ли оптимизировать что-либо из нижеперечисленного для увеличения скорости? Обратите внимание, что вставляемые данные - это случайная коллекция символов.
public int flush() throws SQLException {
String sql = "insert into datastore values(?,?,?,?);";
PreparedStatement prep = con.prepareStatement(sql);
for (DatastoreElement e : content) { // content is 10,000 elements long
_KVPair kvp = e.getKvp();
prep.setInt(1, e.getMetaHash());
prep.setInt(2, kvp.hashCode());
prep.setString(3, kvp.getKey());
prep.setString(4, kvp.getValue());
prep.addBatch();
}
int[] updateCounts = prep.executeBatch();
con.commit();
return errorsWhileInserting(updateCounts);
}
Когда таблица создана, это делается через
statement.executeUpdate("create table datastore
(meta_hash INTEGER," +
"kv_hash INTEGER," +
"key TEXT," +
"value TEXT);");
Может ли что-то из перечисленного быть дополнительно оптимизировано, пожалуйста?