【发布时间】:2014-01-12 16:05:10
【问题描述】:
在我的 Java 应用程序中,我需要在硬盘上存储一个大表,因为我希望它是持久的。
我的第一次尝试是这样的: (i & j 可以上升到 300.000 甚至更多,所以我有一个包含 300.000^2 个双条目的数组,这会导致我的系统崩溃。)
stmt.executeUpdate("DROP TABLE IF EXISTS calculations;");
stmt.executeUpdate("CREATE TABLE calculations (factorA, factorB, result);");
double temp = 0;
for (i = 0; i < datasource.size(); i++) {
for (int j = 0; j < datasource.size(); j++) {
if (i != j) {
temp = calc(datasource.get(i),datasource.get(j));
stmt.execute("INSERT INTO calculations (factorA, factorB, result) VALUES ('"+i+"','"+j+"','"+temp+"')");
}
}
}
现在,这执行得非常慢,可能是因为 SQL 命令是一个字符串等。
我的新猜测是,最好先计算 10.000 个 i 的结果,然后将它们作为一个单元存储到数据库中。
但在我尝试实施之前,有人有更好的主意吗?数据库使用不是强制性的,只是一个简单的访问和快速实施。
【问题讨论】:
-
确保将批量插入作为事务进行; sqlite.org/lang_transaction.html - 这将使它们在 SQLite 引擎中排队,然后当您指示事务完成时,将快速提交它们,而不是一一进行。
-
您需要快速写入还是只需要快速读取?你要提取多少行?因子A+因子B的组合可以用作索引吗?
-
其实我两者都需要,快速的写作和阅读,但在第一次写作。
-
好的,我现在使用“PreparedStatement”,看起来效果很好。
标签: java arrays database performance sqlite