如何在分布式Lucene集群中处理索引文件



我们在应用程序中使用Lucene,索引文件保存在运行应用程序的同一服务器的磁盘中。

索引文件目前几乎是2Gb,它们可能会在某个时候更新,例如,当新数据插入数据库时,我们可能必须重建索引的这一部分并添加它们。

到目前为止还不错,因为只有一个应用程序服务器,现在我们必须添加另一个来创建集群,所以我想知道如何处理索引文件?

顺便说一句,我们的应用程序应该是独立于平台的,因为我们的客户使用不同的操作系统,如Linux,其中一些客户甚至使用具有不同存储的云平台,如Amazon EFS或Azure存储。

看来我有两种意见:

1每个服务器都有一个索引文件的副本,并使它们相互同步。

但同步机制将取决于操作系统,我们试图避免这种情况。我不确定如果两个服务器同时用不同的文档更新索引文件是否会引起冲突。

2共享索引文件。与1)类似,文件共享机制是平台感知的。也许将它们保存到数据库是一种选择,但性能如何?我曾想过使用memcached来保存它们,但我没有找到任何例子。

你是如何处理这类问题的?

您可能应该研究一下Compass项目。Compass允许将Lucene索引存储在数据库中,并分布在内存数据网格中,如GigaSpaces、Coherence和Terracotta。不幸的是,这个项目已经过时了,上一个版本是在2009年发布的。但你可以试着根据你的提议进行调整。

另一个选项,查看支持在HDFS文件系统中存储索引的HdfsDirectory。我在包org.apache.solr.store.hdfs中只看到5个类,所以将它们调整为将索引存储到内存缓存(如memcached或redis)中相对容易。

我在github上为RedisDirectory找到了一个项目,但它的初始阶段和最后一次提交是在2012年。我只能推荐它作为参考。

希望这能帮助你找到正确的解决方案。

最新更新