我们在一台服务器上有 16 个核心,每个核心都有 450 万个客户订单。最近,我们每小时向每个核心提交 200 个新订单,然后优化所有核心。我们发现每次优化操作至少需要 30 分钟。我有几个问题:
我们应该在每次提交后进行优化吗?如果我们每天进行优化,在我们的情况下会显着降低查询性能吗?
我们只会将新订单添加到 solr 中,绝不会更新或删除 solr 中的任何订单。那么,我们可以只优化我们提交的索引,换句话说,我们可以按日期范围优化索引吗?
我们在一台服务器上有 16 个核心,每个核心都有 450 万个客户订单。最近,我们每小时向每个核心提交 200 个新订单,然后优化所有核心。我们发现每次优化操作至少需要 30 分钟。我有几个问题:
我们应该在每次提交后进行优化吗?如果我们每天进行优化,在我们的情况下会显着降低查询性能吗?
我们只会将新订单添加到 solr 中,绝不会更新或删除 solr 中的任何订单。那么,我们可以只优化我们提交的索引,换句话说,我们可以按日期范围优化索引吗?
不,不要在每次提交后进行优化。您应该优化的频率取决于您更新的频率。
来自http://wiki.apache.org/solr/SolrPerformanceFactors#Optimization_Considerations
如果您有一个快速变化的索引,而不是优化,您可能只想使用较低的合并因子。优化是非常昂贵的,如果索引是不断变化的,那么轻微的性能提升不会持续很长时间。对于非静态索引,这种折衷通常是不值得的。
“它会显着降低查询性能”的问题是您必须自己测试的问题,但要测量、测量、测量。然后,确定性能是否真的有问题。如果一个 50 毫秒的查询变成一个 60 毫秒的查询,响应时间会增加 20%,但这有关系吗?只有你能回答这些权衡。但是你必须有数字。
您应该分批提交并间隔优化。由于优化是一项非常繁重的操作,其中索引段组合成单个段以提高性能。
但是,使用最新的 Lucene,您甚至可能不需要使用Optimize。
最新版本已弃用优化:-
这种方法已被弃用,因为它效率极低,而且很少被证明是合理的。Lucene 的多段搜索性能随着时间的推移而提高,默认的 TieredMergePolicy 现在以删除段为目标。