Optymalizacja wstawek wsadowych, SQLite
Gram z różnymi rozmiarami buforów, które mają być wstawione do lokalnej bazy danych SQLite i odkryłem, że wstawienie 10 000 000 wierszy danych zajmuje prawie 8 minut, gdy rozmiar bufora wynosi 10 000. Innymi słowy, do zapisania wszystkiego potrzeba 1000 zapisów.
8 minut na przechowywanie 10 000 000 wydaje się trochę za długo (a może tak?)
Czy można zoptymalizować którekolwiek z poniższych, aby zwiększyć prędkość? Pamiętaj, że wstawiane dane to losowy zbiór znaków.
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);
}
Po utworzeniu tabeli odbywa się za pośrednictwem
statement.executeUpdate("create table datastore
(meta_hash INTEGER," +
"kv_hash INTEGER," +
"key TEXT," +
"value TEXT);");
Czy można zoptymalizować którekolwiek z powyższych?