2012-01-30 248 views
0

我正在为我的应用程序构建Lucene Web服务器(使用Java),期望上游应用程序将近100次搜索点击次数/秒(该服务器将托管在各种物理盒子上,由负载平衡器)。数据透视我将拥有几乎50K的文档(每个文档小于1kb大小),并且每天都有新的/更新的〜500个文档。lucene索引更新策略

我想知道大多数推荐的方法,每天在500个文档上构建索引,而不会影响上游扫描过程的性能。

我不能用我的所有服务器文件索引共享之间的任何共享位置,几个选项,我能想到的

1)使用DB指数(JDBC目录) - 在投票站不知道和缺点 2)使用RAMDirectory索引 - 不确定更新策略。 3)使用文件索引 - 不能想到可靠的设计来在各种物理盒子之间构建和传播文件基础索引。

想知道正确的索引设置策略的想法/建议。

+0

查询结果中显示的更新延迟是可以接受的吗? – 2012-01-30 22:44:27

+0

我们在等待时间方面很灵活 - 我们应该有好几个小时或更多的时间(如上所述,我们将每天更新一次数据,也许在更新数据后我们要在一个小时左右开始使用数据) – Rushik 2012-01-31 00:53:28

回答

0

你真的需要自己构建查询/索引服务器吗?

你考虑过ElasticSearch吗?它会自动分区并复制索引,您只需配置您需要的分区数量以及每个分区的复制数量。它也会给你一个简单的HTTP接口来索引和查询。在ElasticSearch中,所有节点/实例都是相同的,因此您可以向任何节点发送和查询文档。

索引小到50K,我猜测带有几个副本的单个分区会处理100个查询/秒的需求。

无论如何,似乎你的要求很轻。小于1KB的50K文档似乎非常适合内存中索引(lucene中的RAMDirectory)。根据将发布到索引的查询,您可以让更少的机器处理100个查询/秒。

考虑到您对更新延迟没有硬性要求,而且新文档的数量非常少,新文档的索引可以通过很多方式完成。您可以通过HTTP将文档发送到每个实例,通过ssh/ftp发送一个CSV文件(或其他内容)与更新的文档,并且每天一次对该文件进行索引。

+0

谢谢Felipe,我可能无法使用ElasticSearch作为我的搜索Java服务,我想执行一些其他的小任务,我想与之结合。对于以后的建议,我可以将文档发送到框中,但是我的RAMDirectory对象将如何自动更新?正如我所提到的,我不希望任何性能影响搜索操作... – Rushik 2012-02-01 02:23:06

+0

您可以同时索引到RAM目录和FSDirectory(文件系统存储)。在实例启动时,打开FSDirectory,然后打开一个传递FSDirectory作为参数的RAMDirectory。这样你就可以得到一个内存中索引和一个文件索引。 – 2012-02-01 05:19:21

+0

当然,但我没有奢望在索引更新后每天都会启动实例。 – Rushik 2012-02-01 07:43:09