Мне нужно регулярно переиндексировать все мои экземпляры домена из действующей устаревшей базы данных, используя пользовательскую реализацию ElasticSearch .
Все предложения, которые я нашел до сих пор, касались оптимизации пакетных операций записи .
Во многих таблицах есть сотни тысяч, если не миллионы записей ипростое решение domain.list().each { ... }
позволяет сразу загрузить весь набор данных в память.
Использование Hibernate ScrollableResults кажется хорошим решением, но оно работает на уровне RecordSet и не воссоздает фактические доменные объекты.Я мог бы использовать поле id
для read()
экземпляра, но это кажется неэффективным.
Плагин Searchable , кажется, выполняет эффективную операцию reindex
.
Какие еще варианты или оптимизации существуют для успешного чтения экземпляров домена в пакетном режиме?
ОБНОВЛЕНИЕ
Я недавно наткнулся на четырехлетнего ребенка.поток в списке рассылки Grails с ответом из @ BurtBeckwith , в котором говорится, что использование ScrollableResultSet было бы неэффективным.Он рекомендует пролистывать записи с использованием стандартных методов GORM и очищать сеанс пакетами.