【发布时间】:2017-02-28 11:04:19
【问题描述】:
首先介绍一下背景知识:我目前在我的 Java Web 应用程序中使用 Hibernate Search 4.2,并且我处理编写大量的 Lucene 索引,我在其中存储了相当多的数据。使用基于目录的索引管理器时,对存储在我最大索引中的单个对象的索引操作大约需要 1 秒。
为了提高性能,我将 indexmanager 切换到 near-real-time,性能得到了突飞猛进的提升,但现在我想使用 Tomcat Parallel Deployments 实现零停机时间部署(这允许我在单个 Tomcat 中并排拥有同一个应用程序的 2 个不同版本),我发现我不能再使用近实时索引管理器了,因为它会缓冲内存中的修改并避免刷新到磁盘直到缓冲区内存已满或应用程序关闭。
我的问题是:在这种情况下我有哪些替代解决方案?我想保持索引过程尽可能同步。
我查看了 Hibernate Search 的代码,发现有不同的提交策略和一个名为 IndexWriterHolder 的类,它允许我提交和刷新写入,但我不确定这些 API 是否或如何被公开曝光。
我还看到 Lucene 4 实现了并发刷新,我在 Hibernate Search 5 中发现了 max_thread_states 标志,它允许我指定并发写入器的数量每个 IndexWriter 的线程,但我以前从未使用过它,我不确定并发刷新是否对我的情况有帮助。
非常感谢任何帮助。谢谢。
【问题讨论】:
标签: java hibernate tomcat lucene hibernate-search