solr缓存

Solr 搜索引擎,因此其数据缓存是定义在 Solr 核心配置文件 solrconfig.xml. 一般情况下,如果 Solr 应用的内存足够,将这些缓存设置大一些会得到更好的性能。

过滤器缓存 (Filter cache). Solr 中通过过滤器查询来缩小搜索范围,以有助于提升搜索性能。对 于每个过滤结果,可以放置在专用缓存中。这个缓存通过过滤查询条件作为缓存关键字,相同的查询会通过缓 存命中而快速得到结果,参见下面的配置文件片段作为例子:

<filterCache  class="solr.FastLRUCache"size="8192"

  initialSize="4096"autowarmCount="0"/>

查询缓存 . 查询缓存可以将查 询结果集缓存下来。由于缓存的内容是 Solr 文档对象的 ID 值,因此其内存占用小,可以将缓存大小设置大 一些来换取更好性能。参见下面的配置文件片段作为例子:

<queryResultCache class="solr.LRUCache"size="8192"initialSize="4096"

                                     autowarmCount="0"/>

文档对象缓存 . 文档对 象缓存用来缓存每个文档对象内容。如果文档对象大,数据很多,可以通过该缓存来减少从索引读取完整数据 的时间。参见下面的配置文件片段作为例子:

<documentCache class="solr.LRUCache"size="8192"

initialSize="4096"autowarmCount ="0"/>

域值缓存 . 域值缓存有一个重要作用,是作为 Facet 对象的缓存,能够大幅 提升带有 Facet 域的查询性能。Solr 实现中,对于每个 Facet 会产生一个对象存放 Facet 域与 Solr 文档 对象关系。该对象中会存放一个整型数组,数组大小与 Solr 索引中文档数目一致。因此可以估算一个 Facet 结果对象的大小:

Facet 对象大小 = 4 bytes × 索引文档条目总数量

可以看出对于很大的产 品目录索引,比如有一百万条,一个 Facet 结果对象大约会占用 4M 字节空间。

特别需要注意的是, 即使在 solrconfig.xml 中没有显式配置域值缓存,Solr 代码仍然会创建相应的缓存实例,此时缓存实例大 小是硬性指定的 100000。当站点应用涉及非常多的 facet 时,很容易引起 Solr JVM 内存不足错误。所以一 定要仔细评估所有可能的 Facet 数量,并根据 JVM 可用内存空间显示设置该缓存实例。

<fieldValueCache class="solr.FastLRUCache" size="512"

        showItems="32"autowarmCount="129"/>

此外如果 Solr 有 深入应用定制,可以增加自定义缓存 . 这些用户自定义缓存可以被自定义代码使用。

<cache name="myUserCache"class="solr.LRUCache"

size="8192" initialSize="4096" autowarmCount="0"/>

其他

在 Commerce 的新产品中,也有其他新特性是依赖搜索框架设计实现的,所以在性能优化中也需要统一考 虑。

猜你喜欢

转载自kavy.iteye.com/blog/2104317
今日推荐