我的代码可以从一个数据库中进行选择,然后进行处理以更新另一个数据库。它有一堆字段(大约100个),大约有400万行,所以这个过程非常慢,整个过程大约需要4个小时。我正在考虑如何改善这段时间,我已经实现了批处理,但似乎并没有获得太多的性能。现在我在想我是否应该进行多线程处理,如果有一种常规方法可以做到这一点。 以下是相关的代码:
Sql sql1 = Sql.newInstance(config.db.url, config.db.login, config.db.password, config.db.driver);
String queryText = "select " + config.sql1.fields.join(",") +" from myTable"
Sql sql2 = Sql.newInstance(config.sql2.db.url, config.sql2.db.login, config.sql2.db.password, config.sql2.db.driver);
String updateSqlText = "update table2 set "+ config.sql2.fields.join("=?,") + "=? where id=?";
sql2.cacheStatements = true
def updateCounts = sql2.withBatch(100, updateSqlText) { ps ->
sql1.eachRow(queryText){row ->
def resultList = []
row.getMetaData().getColumnCount().times{
def value = row.getAt(it)
resultList.add(value)
}
resultList.add(row.SUD_ID)
ps.addBatch(resultList)
}
}
}