Grails批量保存数据

grails批量操作数据

测试数据库为mysql,grails-3.1.5,hibernate4,执行效率为1W/8秒左右。

package com.system

import grails.transaction.Transactional

@Transactional(readOnly = true)
class TestController {

    def sessionFactory

    @Transactional
    def save() {

        println "开始执行:"+new Date().format("yyyy-MM-dd HH:mm:ss")
        def time = System.currentTimeMillis()

        (1..50000).each {counter->
            Test t = new Test()
            t._name="张三"
            t._age="20"
            t._sex="男"
            t._addrs="重庆市"
            t.save()
            if(counter.mod(100)==0) {
                sessionFactory.currentSession.flush();
                sessionFactory.currentSession.clear();
            }
            if(counter.mod(10000)==0) {
                Date endTime    =new Date()
                println "插入"+counter+"条数据,耗时:"+((System.currentTimeMillis()-time)/1000)
            }

        }
        println "结束执行:"+new Date().format("yyyy-MM-dd HH:mm:ss")

        render "执行完成"
    }

}
attachments-2017-11-g6hNzI0q5a1e634738d36.jpg

sql batch,原生sql执行效率显而易见
class TestController {

    def dataSource

    @Transactional
    def save() {

        def time = System.currentTimeMillis()
        def sql = new Sql(dataSource)

        for(int i=0;i<500000;i++) {
            def id = (i+1)
            def title = "测试:"+(i+1)
            def url = "http://www.baidu.com"+(i+1)
            sql.withBatch {stmt->
                stmt.addBatch("insert into test(id,version,title,url) values('"+id+"','0','"+title+"','"+url+"');")
                stmt.executeBatch()
            }
        }
        sql.close()
        println "插入50万条数据,耗时:"+((System.currentTimeMillis()-time)/1000)
        render "插入50万条数据,耗时:"+((System.currentTimeMillis()-time)/1000)

    }
}
效果:
attachments-2018-03-59gbHN1x5ab214aead5a5.png
  • 发表于 2017-11-29 15:25
  • 阅读 ( 1583 )
  • 分类:grails

0 条评论

请先 登录 后评论
不写代码的码农
Jonny

程序猿

65 篇文章

作家榜 »

  1. 威猛的小站长 124 文章
  2. Jonny 65 文章
  3. 江南烟雨 36 文章
  4. - Nightmare 33 文章
  5. doublechina 31 文章
  6. HJ社区-肖峰 29 文章
  7. 伪摄影 22 文章
  8. Alan 14 文章