Java Hibernate搜索(Lucene)近实时indexmanager和Tomcat并行部署

Java Hibernate搜索(Lucene)近实时indexmanager和Tomcat并行部署,java,hibernate,tomcat,lucene,hibernate-search,Java,Hibernate,Tomcat,Lucene,Hibernate Search,首先介绍一下背景知识:我目前在Java web应用程序中使用的是Hibernate Search 4.2,我负责编写大量Lucene索引,其中存储了大量数据。当使用基于目录的索引管理器时,存储在我的最大索引中的单个对象的索引操作大约需要1秒 为了提高性能,我将indexmanager切换到近实时,性能得到了飞跃性的提高,但现在我想使用Tomcat并行部署实现零停机部署(这允许我在一个Tomcat中并行部署相同应用程序的两个不同版本)我发现我不能再使用近实时indexmanager了,因为它在内存

首先介绍一下背景知识:我目前在Java web应用程序中使用的是Hibernate Search 4.2,我负责编写大量Lucene索引,其中存储了大量数据。当使用基于目录的索引管理器时,存储在我的最大索引中的单个对象的索引操作大约需要1秒

为了提高性能,我将indexmanager切换到近实时,性能得到了飞跃性的提高,但现在我想使用Tomcat并行部署实现零停机部署(这允许我在一个Tomcat中并行部署相同应用程序的两个不同版本)我发现我不能再使用近实时indexmanager了,因为它在内存中缓冲修改,并避免刷新磁盘,直到缓冲ram满或应用程序关闭

我的问题是:在这种情况下,我有什么替代方案?我希望使索引过程尽可能同步

我查看了Hibernate搜索的代码,发现有不同的提交策略和一个名为IndexWriterHolder的类,允许我提交和刷新写入,但我不确定这些API是否公开或如何公开

我还看到Lucene 4实现了并发刷新,并且在Hibernate Search 5中发现了max_thread_states标志,该标志允许我指定每个IndexWriter的并发写入线程数,但我以前从未使用过它,我不确定并发刷新是否对我的情况有帮助


非常感谢您的帮助。谢谢。

好问题。简而言之,这在目前是不可能的

IndexWriterHolder实际上不是公共API,并且由于它在后台线程中处理队列而很难公开:直接调用它而不是通过将事件调度到队列中会很快

安全时,Lucene的并行冲洗功能将自动使用;例如,在
大规模定标期间
;我不希望max_thread_states属性对您有多大帮助,但值得尝试其他调优选项


我是Hibernate搜索开发人员之一,不知道Tomcat的并行部署:这听起来像是一个有趣的功能,我们可以探索支持它。请在上打开功能请求或在上开始对话,以更好地帮助我们了解这是如何工作的。

好问题。简而言之,这在目前是不可能的

IndexWriterHolder实际上不是公共API,并且由于它在后台线程中处理队列而很难公开:直接调用它而不是通过将事件调度到队列中会很快

安全时,Lucene的并行冲洗功能将自动使用;例如,在
大规模定标期间
;我不希望max_thread_states属性对您有多大帮助,但值得尝试其他调优选项

我是Hibernate搜索开发人员之一,不知道Tomcat的并行部署:这听起来像是一个有趣的功能,我们可以探索支持它。请在上打开功能请求或在上开始对话,以更好地帮助我们了解这是如何工作的