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

时间:2015-04-01 08:57:12

标签: lucene hibernate-search infinispan

我们的应用程序正在使用Hibernate Search来索引其部分数据。该应用程序在两个JBoss EAP 6.2应用程序服务器上运行,用于负载分配和故障转移。我们需要在一台机器上进行的更改才能立即在另一台机器上看到。索引是应用程序的核心部分,需要与数据库数据保持一致。完全重建它需要很长时间,因此即使在服务器崩溃的情况下它也保持完整是很重要的。此外,预计索引会增长得太大,无法将所有内容保留在内存中。

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

我们尝试的一件事是Infinispan目录,其中包含用于持久性的文件缓存存储,但是我们在OutOfMemoryErrors中遇到了一些问题(另请参阅我在Infinispan论坛中的帖子https://developer.jboss.org/thread/253732)。此外,在我们的第一次测试中,性能仍然不可接受(在我的开发人员计算机上设置了两个集群服务器的索引更新大约需要3秒),但这可能是由于配置问题造成的。

我认为这不是一个不常见的要求,但我找不到很多关于实施它的最佳实践的信息。

谁有类似设置的经验? Infinispan目录适合您吗?任何人都可以建议一个工作配置或如何进入一个?您尝试了哪些替代方案?哪些方法有效?

1 个答案:

答案 0 :(得分:1)

您需要注意使用哪些版本。在JBoss EAP中捆绑的Infinispan版本不是用于存储Lucene索引(即用于其他目的的广泛测试)。

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

在Infinispan最近的开发中,我们对索引存储功能进行了许多改进,修复了一些错误并从中获得了非常显着的性能改进。我希望你能愿意尝试Infinispan 7.2.0.Beta1? 所有这些改进也被反向移植到JBoss Data Grid,6.5版将使它们作为支持的产品提供。请注意,之前不支持存储Hibernate Search索引的这一功能 - 它将成为JDG 6.5的新功能。 JDG 6.5中的模块将与JBoss EAP兼容,您只需确保使用JDG提供的Infinispan构建,而不是内部使用EAP的构建。

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