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

时间:2015-11-07 11:55:07

标签: indexing lucene cluster-computing

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

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

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

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

似乎我有两个意见:

1每台服务器都持有索引文件的副本,并使它们彼此同步。

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

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

你如何处理这类问题?

1 个答案:

答案 0 :(得分:0)

可能你应该调查Compass project。 Compass允许将Lucene索引存储在数据库中,并分布在内存数据网格中,如GigaSpaces,Coherence和Terracotta。不幸的是,这个项目已经过时,最新版本于2009年发布。但是你可以尝试根据你的建议进行调整。

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

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

希望这有助于您找到正确的解决方案。