GParsPool.withPool(numberPool) {
connection.withBatch(10000) { stmt ->
inputFile.eachParallel { data ->
//GParsPool.withPool() {
stmt.addBatch("DELETE FROM user WHERE number = ${data.toLong()} ")
println "IN"
//}
}
println "OUT"
Long startTimee = System.currentTimeMillis()
stmt.executeBatch()
println "deleted Batch"
Long endTime = System.currentTimeMillis()
println "Time taken for each batch: " + ((endTime - startTimee) / 1000)
}
}上面的代码用于从数据库中删除数据。我首先从文件中获取数据,然后将每个文件数据与数据库数据进行匹配,并执行删除查询。但我有5533179条记录,花了很长时间。即使我使用了gpars,但我也遇到了与不使用gpars时相同的性能问题。我已经设置了numberPool=5,但是同样的问题。即使我再次增加numberPool同样的问题
发布于 2014-05-27 18:47:01
为什么不使用SQL in运算符?因此,您可以更快地处理数据。
更新:
从我的头顶开始:
GParsPool.withPool(numberPool) {
Map buffPerThread = [:].withDefaults{ [] }
inputFile.eachParallel { data ->
def buff = buffPerThread[ Thread.currentThread().id ]
buff << data.toLong()
if( 1000 == buff.size() ){
sql.execute 'DELETE FROM user WHERE number in (?)', [ buff ]
buff.clear()
}
}
}我不会在这里使用conn.withBatch,因为in语句已经给出了所需的批处理
https://stackoverflow.com/questions/23886706
复制相似问题