【发布时间】:2012-02-06 06:31:57
【问题描述】:
我需要使用自定义 ElasticSearch 实现定期从实时遗留数据库中重新索引我的所有域实例。
目前我发现的所有建议都是针对优化批量写入操作。
许多表都有数十万条记录,domain.list().each { ... } 的简单解决方案似乎可以一次将整个数据集加载到内存中。
使用 Hibernate ScrollableResults 似乎是一个不错的解决方案,但它在 RecordSet 级别上工作,并且不会重新创建实际的域对象。我可以将id 字段用于read() 实例,但这似乎效率低下。
Searchable 插件似乎执行了高效的reindex 操作。
还有哪些其他选项或优化可以成功批量读取域实例?
更新
我最近在 Grails 邮件列表中偶然发现了一个 4 年前的帖子,其中包含来自 @BurtBeckwith 的 answer,这表明使用 ScrollableResultSet 效率低下。他建议使用标准 GORM 方法对记录进行分页,并批量清除会话。
【问题讨论】:
标签: hibernate grails grails-orm