Solr 将整个索引加载到内存中

Posted

技术标签:

【中文标题】Solr 将整个索引加载到内存中【英文标题】:Solr loads entire index into memory 【发布时间】:2012-03-31 01:16:28 【问题描述】:

我正在将 solr 用于类似的数据 姓名:年龄:性别:余额:下一个余额:兴趣

我在磁盘上有 30 M 条记录,总计 4G。我按年龄检索:23 仅 50 条记录。我在模式 xml 中有 indexed="true"。 Solr 似乎将磁盘上的整个索引加载到内存(4G)中。不应该只将40多条记录检索到内存中吗?

【问题讨论】:

在尝试使用 age:23 进行搜索时,我正在运行 OutOfMemory。它将整个索引加载到内存中。 【参考方案1】:

我认为这取决于您如何配置缓存(它在内存中做什么和不保存)。将整个索引加载到内存中可以大大提高检索结果所需的时间,无论查询如何。

关于配置缓存的详细信息,以及关于性能因素的详细信息:

https://cwiki.apache.org/confluence/display/SOLR/SolrPerformanceFactors

【讨论】:

【参考方案2】:

已存储但未编入索引的字段保存在磁盘上而不是 RAM 中。但是,100% 的记录确实在 RAM 中建立了索引,并且这些索引包含所有索引字段。但是倒排索引在这方面是相当有效的。

但是,当您进行查询时,SOLR 确实会将整个存储(但未索引)的字段内容集检索到 RAM 中以获取匹配的记录。这通常被认为是理想的缓存行为,因为这意味着可以更快地传输搜索结果,从而减少整体查询周转时间。与 SOLR 一样,您可以通过多种方式配置缓存行为以匹配您的 RAM 预算和数据库需求。查看 solrconfig.xml 中的可能性。

请注意,这是一个复杂的领域,如果 Google 是您的主要信息来源,您可能会发现很难完全理解缓存。这是一个最好从 SOLR 书籍中学习的领域。

【讨论】:

SOLR 性能调优方面的好书是什么? 有书总比没有书好。 SOLR 的设置非常简单,以至于很多人不会花时间做一些研究并学习如何使用它提供的所有按钮和旋钮。因此,如果您阅读任何书籍并应用所学知识,您将远远领先于过度依赖默认设置和博客圈中的一些食谱的人群。 我之前确实听从了你的建议。我现在完成了 SOLR 食谱,但现在我正在寻找更具指导性的东西(我喜欢食谱,但它们对以后有好处)。我的经验表明来自同行的建议,总比没有好。【参考方案3】:

也许这是文档缓存。您需要指定它的大小。你能在 solrconfig.xml 中检查以下内容吗?

<!-- documentCache caches Lucene Document objects (the stored fields for each document).
  -->
<documentCache
  class="solr.LRUCache"
  size="16384"
  initialSize="16384"/>

【讨论】:

以上是关于Solr 将整个索引加载到内存中的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript 3,只能读取文件的一部分而不将整个文件加载到内存中

在 Datastax Solr 中创建的 Banana 中加载多个内核

Roslyn - OutOfMemoryException 由于内存中加载的程序集

SetBackgroundDrawable 在内存中加载图像吗?

在 Solr 中索引数据库表数据的最佳方法?

在 UICollectionView 中加载用户相册时内存增长失控