Lucene/Solr Optimize相关总结

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。

Optimize就是优化的意思。说到Optimize,其实问题回归到两个本质问题:updata-in-place/update-out-of-placerestart

1 When Optimize
索引updatedeletedaddupdatedeletedadd反反复复,导致索引千仓百孔指针琳琳散散无用数据或者辅助数据增多,最后影响相同的查询逻辑,越到后面检索性能逐渐糟糕。

2 How Optimize
整体optimize、局部optimize、混合optimize

整体optimize,就是对已经存在的索引,整体optimize下,本质就是基于原来索引进行索引重建。这个过程减少了文本IO、文本分析等开销。据经验对于一个个文本文件从磁盘建索引:建完后优化大约=1:0.6.也即基于索引构建索引二次构建时间开销大概是原来从文本构建的0.6. 这个数据规模5000w。超过5000w的可能优化比一定比原始重建省时,反而时间更长。 Lucene/solr 直接由现成的接口indexWriter.optimize(),调用下就可以了。
在最新的3.4 以后,不建议使用optimize,因为这个太耗时了。所以,在接下来的优化中,会逐步优化增量机制,平衡性能和索引规模下时间开销的。

句部optimize,就是对数据先分区(多个子应用),分区下再分组(多个hash分布),二级分组。这样可以对分区内优化、分组内优化、二级组内优化。这样通过降低规模来实现性能和时间平衡。Lucene2.9.1solr1.4以及以后版本,支持mergePolicy插件化,这样继承默认的policy,然后IndexWriterset新的policy,就可以针对segment或多目录索引进行局部optimize

混合optimize,就是整体和局部都执行。这种情况下,整体的频率降低,局部的频率较高。从而实现阶段性的性能最佳。例如一个月一次整体optimize,每天局部optimize,这样可以保证在性能快要出现下滑时,及时restart到最佳性能点。

3 what optimize
索引optimize本质就是索引重建。如何最大程度大块大块利用之前的索引,将大大改进optimize性能。对应lucene默认的optimize来说,文本读取IO、文本分析时间将免去或者这部分开销大大降低。optimize另外一个本质就是restartoptimize就是业务逻辑的回归,有点类似垃圾回收后,内存有空间连续块。optimize之后,指针、存储变得更加紧蹙、高效。在lucenemergePolicy决定对那些segment合并,或者满足什么属于的segment合并。而合并算法的本质是基于堆排序重新renew 索引。

Lucene/solr
默认调参无法满足需求时,开始扩展mergePolicy,此时仍然无法满足需求,需要扣memory了。
memory:(1) 对象复用。对大批量、单一流向的操作来说,重用对象将大大降低堆内存消耗,减少ygclucene/solr3.4以及以后版本,已经重用documentfield对象,批量操作性能更好。
(2)
重用 待优化索引的大块对象或者大块数据,从而降低重复计算开销。这块的优化涉及lucene 合并算法。
重度复用的话,需要定做一些数据结构,例如,postlist的块独立化。这方面可以参考“wangsou”,详情不变透露!
(3)
调整基础cache大小,做到与os pagecache同步或者改变os pagecache策略。这个问题属于定制index下的os,除了googlebaidusousousogou等大牛已经执行了,其他公司由于业务特性,都很少去优化os这一层。

4 notice
(1)
第一次文本建索引属于IOCPU密集性应用,OptimizeIO密度降低、CPU密度提升。Optimize过程中IO次数尽管少了,memory消耗增多,但是关联的文件数据大小更大。需要平衡大文件颠簸MemoryDISK开销。
(2)Mutithread
多路归并,需要较好的硬件支持。
(3)
尽量不要动用optimize,从业务上着手优化性能

目录
相关文章
|
自然语言处理 索引
Lucene&solr 4 实践(3)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本部分主要是针对FSA FST做前期知识储备和基本概念扫盲。FST是lucene4 solr4 的索引和查询的核心! 下面的内容来自多个出去,出去就不一一列举。
118 0
Lucene&solr 4 实践(3)
|
缓存 Java 索引
Solr&Lucene cache简要汇总
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本文汇总Solr Lucene cache相关内容。撇开系统结构、架构这些整体性的分析,纯粹从使用方面做梳理。
235 0
Solr&Lucene cache简要汇总
|
存储 Apache 索引
Lucene就是这么简单(二)
Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。
128 0
Lucene就是这么简单(二)
|
SQL 自然语言处理 算法
Lucene就是这么简单(三)
Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。
179 0
Lucene就是这么简单(三)
|
SQL 数据采集 自然语言处理
Lucene就是这么简单(一)
Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索领域是一个经典的祖先,现在很多检索引擎都是在其基础上创建的,思想是相通的。
166 0
Lucene就是这么简单(一)
|
自然语言处理 Java API
Lucene&solr 4 实践(1)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。Solr&Lucene 4.0 好,很好,很强大。对于从lucene2.0 solr0.9 就关注,一直过来的人来讲, 4.X序列除了的架构、风格、API改变了很多很多,更重要的是业务的优化口子更多了,专业知识要求更高。整个架子的容量、包容性、以及适应信息检索的科研,直接上来demo运行easy、深入会很难。需要整理了解的知识点太多了。
108 0
|
算法 Java Maven
Lucene&solr 4 实践(4)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。本部分主要分析FST,快乐理解lucene fst包的源码细节和来龙去脉。
157 0
|
自然语言处理 算法 架构师
Lucene&solr 4 实践(8)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。Lucene 5 有哪些点对大数据倒排索引和检索有优势 1.索引懒加载lazy加载,意味着按时间段或者其他分割的数据可以按需加载 2.FST词典结构以及基于图的索引、查询,使得内存消耗更低 3.异步合并,使得增量索引合并时的“索引整理”开销或者对查询影响更小 4.commitpoint 视图下reader自动更新,使得大规模数据的虚拟分组、全量切换更加方便。
146 0
|
自然语言处理 算法 Apache
Lucene&solr 4 实践(5)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。这部分先通透FST的原理和构造方法,方便理解lucene FST、Builder两个核心对象,从而彻底看清基于图的lucene4索引、查询的发展脉络。至于读懂后有神马用,自个琢磨啊! 看懂估计要死伤不少脑细胞哦!
239 0
|
编解码 缓存 自然语言处理
Lucene&Solr 4 实践(2)
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。在第一部分,还不完善基础上,进入第二部分吧。结合源码来认识lucene! 重点是:从需求到方案到实践编码到结果、从原理到实现、从结构到细节、从总体认识到西部深入。
107 0