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

[经验分享] Lucene/Solr Optimize相关总结

[复制链接]

尚未签到

发表于 2018-11-2 06:34:40 | 显示全部楼层 |阅读模式
  Optimize就是优化的意思。说到Optimize,其实问题回归到两个本质问题:updata-in-place/update-out-of-place、restart。
  1WhenOptimize
  索引update、deleted、add、update、deleted、add反反复复,导致索引“千仓百孔”、“指针琳琳散散”、“无用数据或者辅助数据增多”,最后影响相同的查询逻辑,越到后面检索性能逐渐糟糕。
  2HowOptimize
  整体optimize、局部optimize、混合optimize
  整体optimize,就是对已经存在的索引,整体optimize下,本质就是基于原来索引进行索引重建。这个过程减少了文本IO、文本分析等开销。据经验对于一个个文本文件从磁盘建索引:建完后优化大约=1:0.6.也即基于索引构建索引二次构建时间开销大概是原来从文本构建的0.6.
  这个数据规模5000w。超过5000w的可能优化比一定比原始重建省时,反而时间更长。Lucene/solr
  直接由现成的接口indexWriter.optimize(),调用下就可以了。
  在最新的3.4
  以后,不建议使用optimize,因为这个太耗时了。所以,在接下来的优化中,会逐步优化增量机制,平衡性能和索引规模下时间开销的。
  句部optimize,就是对数据先分区(多个子应用),分区下再分组(多个hash分布),二级分组。这样可以对分区内优化、分组内优化、二级组内优化。这样通过降低规模来实现性能和时间平衡。Lucene2.9.1、solr1.4以及以后版本,支持mergePolicy插件化,这样继承默认的policy,然后IndexWriter中set新的policy,就可以针对segment或多目录索引进行局部optimize。
  混合optimize,就是整体和局部都执行。这种情况下,整体的频率降低,局部的频率较高。从而实现阶段性的性能最佳。例如一个月一次整体optimize,每天局部optimize,这样可以保证在性能快要出现下滑时,及时restart到最佳性能点。
  3whatoptimize
  索引optimize本质就是索引重建。如何最大程度大块大块利用之前的索引,将大大改进optimize性能。对应lucene默认的optimize来说,文本读取IO、文本分析时间将免去或者这部分开销大大降低。optimize另外一个本质就是restart。optimize就是业务逻辑的回归,有点类似垃圾回收后,内存有空间连续块。optimize之后,指针、存储变得更加紧蹙、高效。在lucene中mergePolicy决定对那些segment合并,或者满足什么属于的segment合并。而合并算法的本质是基于堆排序重新renew
  索引。
  Lucene/solr默认调参无法满足需求时,开始扩展mergePolicy,此时仍然无法满足需求,需要扣memory了。
  抠memory:(1)
  对象复用。对大批量、单一流向的操作来说,重用对象将大大降低堆内存消耗,减少ygc。lucene/solr3.4以及以后版本,已经重用document、field对象,批量操作性能更好。
  (2)重用待优化索引的大块对象或者大块数据,从而降低重复计算开销。这块的优化涉及lucene合并算法。
  重度复用的话,需要定做一些数据结构,例如,postlist的块独立化。这方面可以参考“wangsou”,详情不变透露!
  (3)调整基础cache大小,做到与ospagecache同步或者改变os
  pagecache策略。这个问题属于定制index下的os,除了google、baidu、sousou、sogou等大牛已经执行了,其他公司由于业务特性,都很少去优化os这一层。
  4notice
  (1)第一次文本建索引属于IO、CPU密集性应用,Optimize上IO密度降低、CPU密度提升。Optimize过程中IO次数尽管少了,memory消耗增多,但是关联的文件数据大小更大。需要平衡大文件颠簸Memory和DISK开销。
  (2)Mutithread多路归并,需要较好的硬件支持。
  (3)尽量不要动用optimize,从业务上着手优化性能


运维网声明 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-629520-1-1.html 上篇帖子: Solr监控 下篇帖子: Solr/Lucene日志分析-查询热点词-脚本工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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