У меня есть класс домена с пятью свойствами, все из которых являются либо строками, целыми числами, либо двойными. Я использую базу данных H2 в памяти в качестве источника данных для этого класса домена. Это единственный объект, хранящийся в этой базе данных; остальные хранятся в совершенно отдельной базе данных MySQL.
База данных H2 является временной. Данные загружаются из удаленно загруженного файла CSV каждый час и заменяют старые данные в базе данных. Поскольку все остальные процессы должны ждать его завершения, важно, чтобы он был максимально быстрым.
Прямо сейчас мой код генерирует массив из примерно 6000 этих доменных объектов, затем для каждого save
s. Это все внутри withTransaction
.
Для сохранения требуется около 10 секунд. Цифры немного хуже с источником данных HSQLDB в памяти. Я пробовал следовать инструкциям по очистке сеанса и тому подобному, но они только увеличивают время, которое требуется.
Как лучше всего ускорить пакетную вставку этих 6000 объектов? Будет ли отказ от GORM и непосредственное написание операторов вставки SQL значительно быстрее?
// data is an array of about 6,000 domain objects
data.each { item ->
item.save()
}