使用Hibernate搜索和Lucene设置分布式索引

使用Hibernate搜索和Lucene设置分布式索引,lucene,hibernate-search,infinispan,Lucene,Hibernate Search,Infinispan,我们的应用程序正在使用Hibernate搜索对其部分数据进行索引。该应用程序运行在两台JBoss EAP 6.2应用程序服务器上,用于负载分配和故障切换。我们需要在一台机器上所做的更改在另一台机器上立即可见。索引是应用程序的核心部分,需要与数据库数据保持一致。完全重建它需要很长时间,因此即使在服务器崩溃的情况下,它也必须保持完整。此外,该索引预计会变得太大,无法将其全部保存在内存中 我们当前的解决方案是使用带有共享文件系统(NFS)和JGroups后端的标准文件系统目录,以确保在任何时候只有一台

我们的应用程序正在使用Hibernate搜索对其部分数据进行索引。该应用程序运行在两台JBoss EAP 6.2应用程序服务器上,用于负载分配和故障切换。我们需要在一台机器上所做的更改在另一台机器上立即可见。索引是应用程序的核心部分,需要与数据库数据保持一致。完全重建它需要很长时间,因此即使在服务器崩溃的情况下,它也必须保持完整。此外,该索引预计会变得太大,无法将其全部保存在内存中

我们当前的解决方案是使用带有共享文件系统(NFS)和JGroups后端的标准文件系统目录,以确保在任何时候只有一台服务器写入给定的索引。这或多或少是可行的,但有时我们会遇到索引更新耗时很长(最多20秒)或完全失败的问题。由于其他一些原因,我们需要从当前使用的文件系统迁移出去,因此我们正在评估当前设置的替代方案

我们尝试过的一件事是Infinispan目录,它带有用于持久化的文件缓存存储,但是我们在OutOfMemoryErrors方面遇到了一些问题(另请参阅我在Infinispan论坛上的文章)。此外,在我们的第一次测试中,性能仍然不可接受(对于在我的开发人员机器上设置了两个集群服务器的索引更新,大约需要3秒钟),尽管这可能是由于配置问题

我认为这并不是一个不寻常的要求,但我找不到太多关于实现它的最佳实践的信息


谁有类似设置的经验?Infinispan目录对您有用吗?有人能建议一个工作配置或如何继续得到一个?您尝试过哪些替代方案,哪些可行?

您需要小心使用哪些版本。捆绑在JBoss EAP中的Infinispan版本不用于存储Lucene索引

JBoss EAP 6.2发布时,捆绑的Infinispan被认为适合应用服务器的内部需求,但正如您可能已经发现的,索引存储的功能至少存在一些性能问题

在Infinispan的最新开发中,我们对索引存储功能进行了许多改进,修复了一些错误,并从中获得了非常显著的性能改进。我希望您愿意尝试Infinispan 7.2.0.Beta1? 所有这些改进也都被后传到JBossDataGrid,版本6.5将使它们成为受支持的产品。请注意,存储Hibernate搜索索引的这一功能以前不受支持,它将成为JDG 6.5的一项新功能。 JDG 6.5中的模块将与JBoss EAP兼容,您只需确保使用JDG提供的Infinispan版本,而不是用于EAP内部使用的版本


性能改进仍在进行中。它已经好得多了,特别是与旧版本相比,但我们不会停止这方面的工作,所以如果您可以尝试Infinispan 7.2.x的最新最新版本(另一个版本定于明天发布),我非常感谢您的反馈,希望您能继续推广。

Hibernate Search和Infinispan Directory的新版本有巨大的性能改进,您不必使用EAP内部的版本。例如,您可以使用JBoss Data Grid提供的模块,其中包含Hibernate Search和Infinispan目录的更新版本:。这些模块是在现有EAP模块的基础上分层的,并包含一个单独的“插槽”,您可以依赖该插槽而不会与内部库发生冲突。你试过那条路线吗?你试过JGroups的哪些后端?有一个是静态主选择(通过配置),还有一个是尝试自动选择,但这是实验性的。我将尝试在Infinispan相关问题上提供帮助,但我很想知道您尝试了哪些替代方案。我们使用自动选举后端,因为我们需要另一个节点在一个节点失败时自动接管。感谢您的回答,Sanne!我尝试切换到一个较新的infinispan版本,但由于依赖关系,我需要使用一个较新的Hibernate版本,以便使用较新的Hibernate搜索版本,以便使用较新的infinispan版本。我认为替换容器附带的Hibernate版本可能不是一个好主意。我错过了什么吗?你是对的,在上游项目中,随着社区更新到Lucene 4.10x,你需要升级Infinispan和Hibernate搜索。JDG 6.5中支持的组件与Lucene 3.6.x和包含EAP的Hibernate版本兼容。您可以尝试EAP6.4(现在可用,包括Hibernate搜索)或切换到WildFly 9。我们的目标是在将来不会有如此强的版本耦合,但由于这是一个新特性,(非常)旧的特性将无法工作。