2015-11-07 126 views
2

我们在我们的应用程序中使用Lucene,并将索引文件保存在应用程序运行所在的同一服务器的磁盘中。如何处理分布式Lucene集群中的索引文件?

索引文件几乎是2Gb的此刻,他们也许某个时候更新,例如,当新的数据被插入到数据库中,我们可能需要重新建立索引的那部分,并添加他们。

到目前为止好,因为只有一个应用程序服务器,现在我们得再添做集群,所以我不知道如何处理索引文件?

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

好像我有两个观点:

1每台服务器保存索引文件的副本,并且使它们彼此同步。

但同步机制将取决于OS上,我们试图避免这种情况。如果两台服务器在某个时间用不同的文档更新索引文件,我不确定是否会导致冲突。

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

你如何处理这类问题?

回答

0

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

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

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

希望这可以帮助您找到合适的解决方案。