elasticsearch index 之merge
merge是lucene的底层机制,merge过程会将index中的segment进行合并,生成更大的segment,提高搜索效率。segment是lucene索引的一种存储结构,每个segment都是一部分数据的完整索引,它是lucene每次flush或merge时候形成。每次flush就是将内存中的索引写出一个独立segment的过程。所以随着数据的不断增加,会形成越来越多的segment。因为segment是不可变的,删除操作不会改变segment内部数据,只是会在另外的地方记录某些数据删除,这样可能会导致segment中存在大量无用数据。搜索时,每个segment都需要一个reader来读取里面的数据,大量的segment会严重影响搜索效率。而merge过程,会将小的segment写到一起形成一个大的segment,减少其数量。同时重写过程会抛弃那些已经删除的数据。因此segment的merge是有利于查询效率的。
elasticsearch的merge其实就是lucene的merge机制。merge过程是lucene有一个后台线程,它会根据merge策略来决定是否进行merge,一旦merge的条件满足,就会启动后台merge。merge策略分为两种,这也是大多数大数据框架所采用的,segment的大小和segment中doc的数量。以这两个标准为基础实现了三种merge策略:TieredMergePolicy、LogDocMergePolicy 及LogByteSizeMergePolicy。elasticsearch这一部分就是对这三种合并策略的封装,并提供了对于的配置。它的实现方式如下所示:
底层mergeprovider实现了对三种合并策略的初始化和配置,并通过getMergePolicy()方法对外提供。这三种合并策略中LogDocMergePolicy是根据doc数量进行合并,其它两种都是根据segment的大小,只是TieredMergePolicy合并过程是分层进行,它会把小于某一值的所有segment合并成一个大的segment,然后再一次进行。
以上是合并策略,除了合并策略还有一个要说的就是合并线程。前面说过,merge是通过独立线程完成的,lucene对于线程策略也有两种,一种是顺序,另外一种就是并发。顺序合并策略会阻止索引的进行,因此多数情况先不会使用,而并发合并则是和index过程同时进行,这样不会影响索引和搜索。elasticsearch同样通过provider的形式提供这两种合并线程配置。
总结:merge能够通过减少segment数量来提高搜索速度。但是merge的过程会对索引吞吐量及搜索速度有一定的影响,因此需要配置适当的合并策略参数。对于资源不足的环境,最好禁止自动merge,选择空闲时段手动进行merge。
,
转载于:https://www.cnblogs.com/zziawanblog/p/6876093.html
elasticsearch index 之merge相关推荐
- elasticsearch index 之 put mapping
elasticsearch index 之 put mapping mapping机制使得elasticsearch索引数据变的更加灵活,近乎于no schema.mapping可以在建立索引时设置, ...
- elasticsearch index、create和update的源码分析
https://segmentfault.com/a/1190000011272749 社区里面有人问了如下一个问题: 执行 bulk 索引文档的时候,用 index 或者 create 类型并且自定 ...
- ElasticSearch index 剖析
ElasticSearch index 剖析 在看ElasticSearch权威指南基础入门中关于:分片内部原理这一小节内容后,大致对ElasticSearch的索引.搜索底层实现有了一个初步的认识. ...
- sheet.range(‘U‘ + str(index - 1), ‘U‘ + str(index)).api.merge(),xlwings合并Excel上下相邻单元格,代码中断执行,也不报错。
一.背景 采用xlwings包,根据template.xlsx模板,导出excel成果内容,包括多个sheet内容的填充,可实现上下相邻单元格的合并(左右单元格合并也是一个道理),代码运行卡着,也不报 ...
- Elasticsearch Index Lifecycle Management (ILM)
0 - 前言 Elastic Stack 6.6版本的发布,带来了很多新功能,比如: Index Lifecycle Management Frozen Index Geoshape based on ...
- elasticsearch index doc过程概述
文章目录 概述 1.es中的基础概念 2.es中的索引过程 2.1 一次index请求的大体流程 2.2 为什么是near real time 2.3 为什么要有translog 2.3.1 tran ...
- Go Elasticsearch index CRUD
文章目录 1.简介 2.增加 2.删除 3.修改 3.1 更新 mapping 3.1.1 增加字段 3.1.2 删除字段 3.1.3 添加 multi-fields 3.2 重命名 index 4. ...
- Elasticsearch Index Aliases详解
index aliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图. 思考:一个索引别名可以映射成多个索引,那如果 ...
- ElasticSearch Index Settings
目录 Index Settings 静态索引配置 index.number_of_shards index.shard.check_on_startup index.codec index.routi ...
最新文章
- 作为程序员,要取得非凡成就需要记住的15件事。
- 人工智能的影响调查_调查报告|文科大学生群体对于人工智能影响 就业的认知程度:基于访谈的质性研究...
- poi 拆分带图片的word_学会这2招,再多的“表格编号”都能轻松解决!【Word教程】...
- java文件不能生成class,一文说清!
- 链接服务器---无效的产品名称
- 漫谈移动开发中的组件化
- java字符转为数字_Java 判断字符串能否转化为数字的三种方法
- aswing JTable用法
- 【CF1312D】Count the Arrays(计数)
- matlab男女声识别,matlab男女声音识别
- 8086微型计算机第五章接口,微机原理与接口技术课程论文.doc
- asterisk meetme 会议实现
- matlabrobert锐化_Matlab图像处理系列3———空间域锐化滤波器
- 7-6 打印沙漏 (20 分)
- Fetch —— 中止尚未完成的接口请求
- linux操作系统基础复习
- 设备漏电对计算机影响,机箱漏电会不会影响电脑 机箱漏电会不会烧电脑主机内部硬件吗...
- 《Java SE实战指南》22-04:字节流和字符流
- 解决 github 报错 Failed to connect to github.com port 443:connection timed out
- Vijos P1474雷曼兔(csapc)
热门文章
- 100行代码让您学会JavaScript原生的Proxy设计模式
- LoadRunner常见问题分析
- python程序的书写特点_不一样的Python代码写法,让你写出一手漂亮的代码
- 没有内存条电脑能开机吗_电脑没内存条能开机吗?这位朋友说他的电脑没内存条都用几年了!...
- 纯ajax html网页,JavaScript – 页面加载纯HTML AJAX网站中的替代品
- python封装c++接口_使用MetaSIP自动生成SIP封装C++到Python接口
- python集合的操作_Python集合操作方法详解
- ipython怎么安装numpy_在TensorFlow教程中安装numpy后仍然无法导入
- java序列化_技术干货 | JAVA反序列化漏洞
- 长安大学研究生院计算机学院,研究生教育