Solr4.0性能调优之缓存配置

[size=medium]  Solr配置文件[solrconfig.xml]有三种缓存分别是 filterCache,queryResultCache,documentCache但Solr是在什么时候,什么情况下会用到这些缓存呢,通过看Solr的源码,下面对Solr三种缓存做说明:[list][1]. Filter cache(过滤器缓存),用于保存过滤器(fq 参数)和层面搜索的结果
[2]. Document cache(文档缓存),用于保存 lucene 文档存储的字段
[3]. Query result(查询缓存),用于保存查询的结果
[/list]
  通过这3种缓存,可以对solr的搜索实例进行调优。调整这些缓存,需要根据索引库中文档的数量,每次查询结果的条数等。在调整参数前,需要事先得到 solr 示例中的以下信息:[list][1]. 索引中文档的数量
[2]. 每秒钟搜索的次数
[3]. 过滤器的数量
[4]. 一次查询返回最大的文档数量
[5]. 不同查询和不同排序的个数
[/list]
  Solr中主要是LRUCache,主要使用的是LRU是Least Recently Used最近最少使用算法。LRU算法的描述如下:

[align=left][color=darkblue][b]LRU算法[/b][/color][/align]
内存管理的一种算法,对于在内存中但最近又不用的数据块(内存块)叫做LRU,Oracle会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。

  什么是LRU算法? LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。

  关于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的重要方向。而内存的虚拟存储管理,是现在最通用,最成功的方式—— 在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。

  然而,有利就有弊,虚拟页式存储管理减少了进程所需的内存空间,却也带来了运行时间变长这一缺点:进程运行过程中,不可避免地要把在外存中存放的一些信息和内存中已有的进行交换,由于外存的低速,这一步骤所花费的时间不可忽略。因而,采取尽量好的算法以减少读取外存的次数,也是相当有意义的事情。

  我们可以通过solr管理界面查看缓存的状态,也可以通过日志进行查看。下图是我进行的参数设置后的状态:

[img]http://dl2.iteye.com/upload/attachment/0086/4560/227757ce-0636-307f-8ba6-ba6bd8d19100.jpg[/img]
[align=left][b]参数说明:[/b][/align][list][1]. lookups: 查询次数
[2]. hits: 命中次数
[3]. hitratio:命中率
[4]. inserts: 插入数量
[5]. evictions:剔除数量
[/list]
[/size]

[align=left][size=x-large][color=darkblue]缓存配置solrconfig.xml[/color][/size][/align][size=large]filterCache 缓存[/size]

[size=medium]  filterCache:当搜索请求参数中带有参数"ids"时,Solr会去filterCache里查,filterCache里Key是query,值是DocSet,,也就是无序的Document id,如果有多个ids里包含多个id,则用分隔符“,”分开。如果filterCache中没有对应的值,则通过reader都查找对应的DocSet,并添加到filterCache缓存中。[/size]
<filterCache class="solr.FastLRUCache"
size="10240"
initialSize="8092"
autowarmCount="4096"/>

[size=large]queryResultCache 缓存[/size]
[size=medium]  如果搜索请求参数没有ids参数时,则会不去filterCache缓存里找,而且没有Filter时,才是去queryResultCache里查找,queryResultCache里保存的是有序的DocList。在查到docList后,回去取docSet,即会在filterCache中查,没有的话会加到filterCache中,如果queryResultCache缓存中没有值,也先去取docSet,即通过filterCache,没有对应的值的话,则重新构建,添加到缓存中,则通过一般的查找方式找到。然后添加到queryResultCache缓存中。[/size]
<queryResultCache class="solr.LRUCache"
size="1024"
initialSize="1024"
autowarmCount="512"/>

[size=large]documentCache 缓存[/size]
[size=medium]  documentCache 是在通过doc(int i) 方法取document时,用到的。 documentCache 不存在的话,这通过reader去取,取到document后,添加到documentCache 缓存。[/size]
<documentCache class="solr.LRUCache"
size="10240"
initialSize="8092"
autowarmCount="4096"/>

[size=large]fieldValueCache 缓存[/size]
[size=medium]  fieldValueCache 缓存是在solr组件FacetComponent组件里发货作用的。条件是如果要统计的Field是multiValued,也就是有多个值的情况,solr 会根据field创建一个field反正类UnInvertedField,通过注解大概了解是节约内存和加速facet统计。[/size]
<fieldValueCache class="solr.FastLRUCache"
size="512"
autowarmCount="128"
showItems="32" />

[size=large]httpCache 缓存[/size]
[size=medium]  Solr httpCache 主要是用来判断当前的搜索请求request的请求头header的If-Modified-Since和If-None-Match的两个值。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值