设为首页 收藏本站
查看: 1005|回复: 0

[经验分享] solr缓存学习

[复制链接]
累计签到:4 天
连续签到:1 天
发表于 2017-12-18 23:44:26 | 显示全部楼层 |阅读模式
  sor缓存
  虽然solr的检索速度很快,但是当搜索服务的请求变得非常复杂的时候,我们还是会发现搜索会出现一些性能上的问题。其实很多用户的请求很有很多相似的地方,
  比如(一):它们可能是不同用户的同一个请求,或者这个用户仅仅是进行了翻页的操作;(二):用户的过滤条件会有重合的地方,比如它们在同一个类目下进行了不同的查询;
  针对这两个问题,其实我们可以通过设置solr的缓存来使查询速度变快从而提高性能。
  solr的cache类型:
  (1)filterCache过滤器缓存:这个缓存主要是针对fq进行的。通常用户会在一个固定的业务场景下进行不同的查询,而启用这个缓存会大大地提高搜索性能。
  (2)queryResultCache查询结果缓存:需要满足query、filterquery sortFiled一致才行。如果多次执行一个查询,其实看到的是缓存取出的结果,并不是去索引的结果。对要耗费大量计算资源的查询来说,这是一种比较高效的解决方式。
  queryResultWindowSize:我们可以去设置查询结果窗口大小,比如我们每页展示20个商品,如果用户大多数情况下去浏览第一页第二页那么我们可以把queryResultWindowSize设置为40,这样就可以避免用户查看第二页时再次执行查询请求。(这个可以通过跑数据来决定我们要设置的值)
  enableLazyFieldLoading:一般我们置为true,避免拉到不必要的字段
  (3)documentCache文档缓存:里面存储了文档的内容,如果索引更新的比较快,结果文档也常在变化,那么文档缓存可能会把资源耗费在对应用程序性能无益的地方。但是如果索引更新频率很低,那么文档缓存可能有助于提高应用程序的性能。
  (4)filedCache字段值缓存:这个缓存主要是lucene来管理,而不是solr来管理。它提供了可以快速访问字段值的途径,主要是用在sort和facet是使用。
  (4)filedValueCache多值字段缓存:主要用于存储multivalued Field,同上面的filedCache,它是solr特有的缓存,如果你不配置在solrconfig.xml那么它会自动初始化为(初始大小10,最大10000),这样可能会有内存溢出的风险。
  搜索器:
  在这里就不对搜索器进行很细致的介绍了,因为本文档不是主要介绍搜索器的,而搜索器的一些操作可能会用到缓存且对缓存造成影响,在这提一下。
  1.当你在对solr进行一次硬提交(普通提交)的时候,你可以选择打开搜索器或者不打开,如果不打开可能会导致搜索不可见,因为搜索器存的只是索引的只读视图,当你对索引改变时,需要重新启动一个搜索器来重新加载只读视图。而一个新的搜索器的加载,会导致缓存的失效,导致那段时间用户的体验很差。
  2.当你进行软提交的时候cache(filterCache、queryResultCache、fieldvaluecache )都会失效,如果进行一个很频繁的软提交,那么缓存几乎是不可用的
  3.如果你打开了opensearch为true那么你可以选择对搜索器进行预热。
  这里有一个链接很好地讲了软提交和硬提交https://hacpai.com/article/1489704451481?m=0。
  缓存大小:
  从缓存大小来说,我们不能把缓存设置的太大,否则它会消耗jvm的大部分内存。solr能够将所有的缓存都保存在内存中,不会溢出到硬盘上,solr为了控制缓存的大小要求每个缓存都要配置它们的上限。当数量达到上限时,solr将采用LRU最久未使用置换法或LFU最近最少使用置换法回收一部分空间。
  LRU:当缓存达到上限且需要添加新对象时,solr将会置换缓存中最久未被请求过的对象。
  LFU:该方法根据缓存对象被请求频率的高低决定缓存对象被回收的次序。(过滤器缓存是使用这个的好地方)
  注意:一般我们会有一个误区,就是如果我们内存足够,缓存应该设置得越大越好。其实不然,因为一旦缓存失效,那么JVM需要进行大量的垃圾回收工作,如果不对缓存做合适的调整那么可能会导致JVM长时间在做垃圾回收工作,而暂停服务。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425547-1-1.html 上篇帖子: solr java demo 基础入门 下篇帖子: SOLR-disMax查询参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表