我正在尝试从 Excel 文件批量插入 DB/2。我在 Windows 10 电脑上运行 WildFly 12。DB/2 在 CentOS 7 下的 VM 上运行。
使用 POI SAX 方法,读取包含 2.5M 记录的完整 XLSX 文件需要 80 秒。
我开始在 EJB 程序中使用简单的插入,将文字插入到表中。这花了大约 1.5 小时。
阅读https://www.idug.org/p/bl/et/blogid=2&blogaid=602后,我改为使用批处理准备语句。我还首先写入全局临时表,最后使用“INSERT INTO SELECT ... FROM”。
关闭自动提交。
最终结果仍然需要一个小时,即每秒 750 次插入。
准备物品:
// get connection using DriverManager class
try {
connection = DriverManager.getConnection(
"jdbc:db2://192.168.0.5:50000/mydb",
"hussain",
"hussain");
} catch (SQLException e1) {
out.println("Failed to get connection");
e1.printStackTrace();
return;
}
// Clear the table
try {
Statement statement = connection.createStatement();
statement.execute("TRUNCATE TABLE " + strMainTable + " IMMEDIATE");
statement.execute("ALTER TABLE " + strMainTable + " ALTER COLUMN ID RESTART WITH 1 ACTIVATE NOT LOGGED INITIALLY");
statement.close();
} catch (SQLException e2) {
out.println("Failed to clear table<br>");
e2.printStackTrace();
return;
}
try {
Statement statement = connection.createStatement();
statement.execute("DROP TABLE " + strTempTable);
statement.close();
} catch (SQLException e2) {
out.println("Failed to delete table<br>");
}
是的,DB/2 在虚拟机中运行,因此写入速度受到很多因素的影响。尽管如此,750 条记录/秒还是非常慢的。文章作者说他最差的速度是3000/s,最好的是140k/s。能靠近就好了。
我还应该看什么?
小怪兽爱吃肉
江户川乱折腾
翻阅古今
相关分类