首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy GPars脚本

Groovy GPars脚本
EN

Stack Overflow用户
提问于 2014-05-27 18:13:06
回答 1查看 315关注 0票数 0
代码语言:javascript
复制
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同样的问题

EN

回答 1

Stack Overflow用户

发布于 2014-05-27 18:47:01

为什么不使用SQL in运算符?因此,您可以更快地处理数据。

更新:

从我的头顶开始:

代码语言:javascript
复制
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语句已经给出了所需的批处理

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23886706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档