【发布时间】:2012-03-07 12:06:59
【问题描述】:
我有一个具有五个属性的域类,它们都是字符串、整数或双精度数。我正在使用 H2 内存数据库作为我的这个域类的数据源。这是存储在此数据库中的唯一对象;其余的存储在一个完全独立的 MySQL 数据库中。
H2 数据库是临时的。每小时从远程下载的 CSV 文件加载数据,并替换数据库中的旧数据。因为所有其他进程都必须等待它完成,所以尽可能快很重要。
现在我的代码生成一个包含大约 6,000 个这些域对象的数组,然后为每个 saves 生成一个数组。这一切都在withTransaction 中。
保存大约需要 10 秒。使用 HSQLDB 内存数据源时,数字会稍差一些。我已经尝试按照有关刷新会话等的说明进行操作,但这些只会增加所需的时间。
加快这 6,000 个对象的批量插入的最佳解决方案是什么?放弃 GORM 直接写 SQL 插入语句会不会快很多?
// data is an array of about 6,000 domain objects
data.each { item ->
item.save()
}
【问题讨论】: