Performance 我应该将Solr中存储字段的大小保持在最小值吗?

Performance 我应该将Solr中存储字段的大小保持在最小值吗?,performance,architecture,solr,search-engine,Performance,Architecture,Solr,Search Engine,我期待着介绍索尔电力搜索一个企业上市网站。该网站有大约200万条记录 有一个搜索结果页面,它将显示每个结果的一些关键数据。我相信这个摘要信息所需的数据大约是每个结果1KB 我可以简单地索引Solr中搜索所需的字段,但这意味着对每个结果进行单独的数据库调用,以填充摘要信息。如果Solr能够返回所有这些数据,我希望它能产生比40次数据库往返更高的性能 令人担忧的是,Solr的内存使用量太大(我该如何计算它呢?),而且索引可能会花费太长的时间来处理额外的数据。与40 db往返相比,将这些字段存储在So

我期待着介绍索尔电力搜索一个企业上市网站。该网站有大约200万条记录

有一个搜索结果页面,它将显示每个结果的一些关键数据。我相信这个摘要信息所需的数据大约是每个结果1KB

我可以简单地索引Solr中搜索所需的字段,但这意味着对每个结果进行单独的数据库调用,以填充摘要信息。如果Solr能够返回所有这些数据,我希望它能产生比40次数据库往返更高的性能


令人担忧的是,Solr的内存使用量太大(我该如何计算它呢?),而且索引可能会花费太长的时间来处理额外的数据。

与40 db往返相比,将这些字段存储在Solr中会大大受益。只需确保在模式配置中将该字段标记为“未索引”(index=false),也可以是压缩的(compressed=true)(当然,在索引和检索时,这将使用一些CPU)


将字段标记为“未编制索引”时,在编制索引时,任何分析器都不会处理该字段,使其存储速度比编制索引的字段快得多。

这是一种折衷,您必须自己进行分析

Solr的性能在很大程度上取决于缓存,不仅是查询的缓存,还包括文档本身的缓存。这些缓存依赖于内存,文档越大,在固定的内存量中容纳的空间就越小

文档大小还影响索引大小和复制时间。对于具有主从配置的大型索引,这可能会影响更新索引的速率

理想情况下,您应该测量不同缓存大小的缓存命中率,有字段和没有字段。如果您可以使用内存来获得足够高的字段缓存命中率,那么请尽一切努力。如果不能,则可能必须从其他系统获取文档内容

还有第三种方法您没有提到,那就是将文档存储在DB之外,而不是存储在Solr中。它们应该以尽可能接近搜索结果的格式存储。创建/更新索引的代码也可以创建/更新这些文档。这是一个很大的工作,但就像所有的事情一样,这取决于你需要多少性能以及你愿意做什么来获得它


编辑:为了测量缓存命中率和吞吐量,我发现最好的测试源是您当前的查询日志。花一两天的时间进行实时查询,并针对不同的索引和配置运行它们,以查看它们的工作情况。

唯一需要注意的是数据库和Solr中的一致数据。如果数据库中的数据发生变化,则需要在Solr中进行更新。