Solr/Lucene MMapDirectory的小细节[转]

转自:http://blog.csdn.net/pangliyewanmei/article/details/5733921
测试 HdfsDirectory 时,把directoryFactory改成 solr.HdfsDirectoryFactory。经测试发现HdfsDirectoryFactory并不适合我,又改成 solr.MMapDirectory。As you know缺省情况下Solr用的solr.NRTCachingDirectoryFactory(至少4.2之后)。

假如没有比较实时的 softCommitTracker,MMapDirectory或是NrtCachingDiectory并不会有太大的影响。当比较实时的索引之后,在MMapDirectory情况下,会产生大量的小索引文件。其实,这个是一件很恐怖的事,会造成大量的索引合并,然后给IO造成巨大的压力。特别是单Node里有多个Shard时,此时就非常明显了。

IO一直报警,那就得找原因找方案了。看了一下索引文件目录出现大量的小文件,与我配置的IndexConfig出入太大。然后检查commitTracker配置和mergePolicy,也就是说一开始并没有意识到DirectoryFactory。只是commitTracker和mergePolicy都没有问题,所以只有DirectoryFactory会影响了。

注意:
你当然知道commitTracker分hard commit和soft commit即CommitTracker, SoftCommitTracker。那你知道这其中的差异吗?
你会说,它们的软提交写内存,硬提交写硬盘。其实不完全对。
在FSDirectory下,它们的区别是flush和force的区别。
只有在NrtCachingDirectory下,它们才有写内存,和写磁盘的区别。

还有一点,只有hard commit才会冲刷UpdateLog即tlog。

到这里,你可能觉得这事就结束,其实还没有。
NrtCachingDirectoryFactory默认DEFAULT_MAX_MERGE_SIZE_MB=4, DEFAULT_MAX_CACHED_MB=48。即是单索引大于4Mb就会直接写磁盘,最多存48Mb的索引在内在上。当然,如果你的索引冲刷不是很快的情况下,这个配置没问题。但由于我一个softCommitTracker,会产生6Mb左右的索引,所以我又把maxMergeSize=12mb, maxCachedSize=64mb。

至此,完全结束了,IO不再告警了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容