es中段是怎么合并的
文章目录
- 1. 段合并的背景
- 2. 合并的方式
- 2.1TieredMergePolicy 的层次结构
- 2.2 层次的基本规则
- 2.3 如何理解层次(tier)
- 2.4. 合并过程中的层次示例
- 2.5. TieredMergePolicy 的优势
- 2.6. 小结
- 3. 合并过程中的优化
- 4. 合并的性能考虑
- 5. 使用 API 手动合并
- 6. 合并的影响
在 ES(Elasticsearch)中,合并(merge)操作通常是指索引中段(segments)的合并。Elasticsearch 使用段(segment)来存储数据,随着时间的推移,数据不断被写入索引,这些数据会被组织成多个段。当数据量增大时,段的数量也会增多,过多的小段可能会影响查询性能。因此,Elasticsearch 会在后台定期执行合并操作,将多个小段合并成较大的段,以提升查询效率并减少磁盘空间的使用。
1. 段合并的背景
- Elasticsearch 是基于 Apache Lucene 构建的,Lucene 采用段化存储(Segmented Storage)来管理索引。
- 每当新的文档被添加到索引时,它会被写入到一个新的段中,直到达到某个阈值(如磁盘空间或写入速率),才会将这些段合并成较大的段。
- 每次合并后,新的段包含了原有段的所有数据,但会丢弃已删除的文档(通过标记为“删除”而非实际删除)。
2. 合并的方式
合并操作主要是通过 Lucene 中的 Merge Policy 和 Merge Scheduler 来控制。Elasticsearch 会在后台使用以下机制来决定何时执行合并操作:
-
自动合并:Elasticsearch 会根据配置的阈值(如段的数量、大小等)来自动进行合并。合并操作是异步进行的,不会影响前台的查询操作。
-
合并触发的条件
:通常,当段的数量过多或者单个段的大小过小时,Elasticsearch 会触发合并操作。合并的过程是通过
MergePolicy来调整的。常见的合并策略包括:
- LogByteSizeMergePolicy:基于段的字节大小来进行合并。
- TieredMergePolicy:基于段的层次结构来进行合并,通常适用于包含大量文档的情况。
-
手动触发合并:可以通过 API(如
force_merge)来手动触发合并操作。例如,在删除大量文档或更新索引时,可能需要通过手动触发合并操作来优化索引。
理解 TieredMergePolicy 中的 层次(tier) 概念,对于更好地优化 Elasticsearch 的段合并策略至关重要。TieredMergePolicy 采用分层的策略来管理段的合并,它的主要目标是控制每个层次中的段的数量、大小以及合并的频率,从而提高索引的查询效率,并避免过早或过频繁的合并。
2.1TieredMergePolicy 的层次结构
在 TieredMergePolicy 中,层次(tier)是指按照段的大小划分的不同“层级”。这些层次帮助管理段的合并,避免过度合并小段,同时确保合并后的段大小合理,能够有效地提升查询性能。
具体来说,Elasticsearch 会将索引中的段分成若干层,每个层次内的段符合某些大小范围。每个层次内的段被合并成一个新的段,直到最终的段符合某个阈值。合并通常发生在以下几种情况:
- 每个层次中的段数量超过设定的阈值,即该层次的段数量过多,可能会导致查询性能下降。
- 每个层次中的段大小过大,即某些段已经过大,合并可以减少查询时需要加载的段数。
2.2 层次的基本规则
TieredMergePolicy 的层次规则可以通过以下几个核心参数来理解:
segments_per_tier(每个层次的最大段数):- 该参数决定了每个层次最多可以包含多少个段。如果某个层次的段数超过了这个值,就会触发合并操作。
- 默认值:
10,意味着每个层次最多有 10 个段。如果某个层次中的段数超过 10 个,就会触发合并,将这些段合并为一个更大的段。
floor_segment(最小段大小):- 该参数定义了段的最小大小。任何小于这个大小的段不会被合并。
- 默认值:
2MB,即小于 2MB 的段不会被合并,因为它们太小,合并也无法带来显著的性能提升。
max_merged_segment(最大合并段大小):- 该参数定义了合并后段的最大大小。合并后的段不应该超过此大小,否则会导致过大的段,影响查询性能。
- 默认值:
5GB,即合并后的段最大不超过 5GB。
2.3 如何理解层次(tier)
层次是 TieredMergePolicy 的核心概念,它描述了段在合并过程中的分组方式。可以通过以下几个层次的特征来理解它的工作机制:
- 第一层:包含最小的段,通常是刚刚写入索引的段,这些段很小(可能只有几MB),不适合马上合并,因此它们会被保留在第一层。
- 第二层及以上:随着段的合并,它们逐渐被移动到更高层次。合并后的段会被分配到第二层、第三层等,直到它们合并成一个大的段。
- 如果一个层次中的段数超过了
segments_per_tier的最大值,或者其中某些段的大小过大(超过了max_merged_segment),就会触发合并操作,将这些段合并成一个更大的段,并移动到下一层。
- 如果一个层次中的段数超过了
2.4. 合并过程中的层次示例
假设我们有以下设置:
segments_per_tier = 10:每个层次最多包含 10 个段。floor_segment = 2MB:最小段大小为 2MB。max_merged_segment = 5GB:每个合并后的段最多为 5GB。
假设索引中当前有以下段(按大小排序):
- 第一层:5 个段,分别为 1MB, 1.5MB, 2MB, 3MB, 4MB(都小于
max_merged_segment,适合保持在第一层)。 - 第二层:12 个段,大小分别为 10MB, 20MB, 30MB 等。
- 第三层:15 个段,大小分别为 100MB, 200MB 等。
在合并的过程中,TieredMergePolicy 会按以下规则工作:
-
第一层的段会尽量保留原样(因为它们很小,合并后可能会浪费资源)。
-
第二层的段,如果超过 10 个段,将被合并成更大的段,直到每个层次中段的数量少于
segments_per_tier(此处为 10)。 -
合并后的段会继续向 更高的层次移动,直到满足合并后的大小上限(例如 5GB)。
2.5. TieredMergePolicy 的优势
- 减少频繁的合并:与
LogByteSizeMergePolicy(基于字节大小的合并策略)不同,TieredMergePolicy会根据段的数量和层次来调整合并的时机,从而减少了过早合并小段的频率。它避免了过度合并的情况,提升了系统的性能和稳定性。 - 合并过程优化:它通过分层控制,使得每个层次中的段数量和大小都在合理范围内,从而避免了过大的段带来的性能问题,也避免了段数量过多导致的查找效率降低。
2.6. 小结
TieredMergePolicy 通过将段分成多个层次来管理合并策略,每个层次的段数和大小有一定的限制。每当一个层次中的段数超出限制时,Elasticsearch 就会触发合并操作,将小段合并为更大的段,并向更高层次迁移。这样可以有效地控制合并过程,减少系统负载,提高查询效率。
- 每个层次的段数超过
segments_per_tier时会触发合并。 - 合并的最大段大小由
max_merged_segment控制。 - 最小段大小由
floor_segment控制,不会合并小于该大小的段。
通过调整这些参数,可以根据实际业务需求优化 Elasticsearch 索引的合并行为,从而平衡性能和资源消耗。
3. 合并过程中的优化
- 去除已删除文档:合并过程中,Lucene 会通过清理标记为删除的文档来减少索引的大小。虽然删除操作是逻辑删除,但合并会物理删除这些文档,从而释放空间。
- 合并段的大小:合并后,新的段会比原来的段大,这样可以减少段的数量。大段通常会更有效地利用缓存和 I/O,从而提高查询性能。
4. 合并的性能考虑
- 后台运行,不影响查询:合并通常是后台任务,不会影响前端的查询性能。然而,在合并过程中,可能会有较高的磁盘和 CPU 使用率,所以在负载较高的生产环境中,要注意合并的频率和时机。
- 优化合并策略:可以根据实际的硬件环境和使用场景来调整合并的策略。例如,在资源紧张的情况下,可以延迟合并,减少系统负担;而在高查询量的环境中,可以加快合并,以提高查询性能。
5. 使用 API 手动合并
-
可以通过
POST /index_name/_forcemergeAPI 来手动触发合并:
POST /my_index/_forcemerge?max_num_segments=1这个命令会将
my_index索引的段合并为最多一个段。注意,
max_num_segments是可选的参数,用于指定要保留的最大段数。
6. 合并的影响
- 查询性能的提高:合并后,查询通常会变得更高效,因为段数减少了,搜索时需要遍历的段也更少。
- 磁盘空间的释放:合并会去除已删除文档,因此可以减少索引的磁盘占用。
- 暂时的性能波动:在合并操作进行时,可能会对系统的 I/O 和 CPU 造成一定压力,导致短期的性能波动。因此,最好在系统负载较低时执行合并操作,或者在需要时配置合并的优先级。
总结来说,Elasticsearch 的合并操作主要目的是通过减少段的数量来优化查询性能和磁盘占用。它是一个自动化的过程,但也可以根据实际情况进行手动触发和配置调整。
相关文章:
es中段是怎么合并的
文章目录 1. 段合并的背景2. 合并的方式2.1TieredMergePolicy 的层次结构2.2 层次的基本规则2.3 如何理解层次(tier)2.4. 合并过程中的层次示例2.5. TieredMergePolicy 的优势2.6. 小结 3. 合并过程中的优化4. 合并的性能考虑5. 使用 API 手动合并6. 合并…...
5、可暂停的线程控制模型
一、需求 在做播放器的时候,很多的模块会创建一个线程,然后在这个线程上跑单独的功能,同时,需要对这个线程进行控制,比如暂停,继续等,如播放器的解码,解封装等,都需要对…...
sql优化--mysql隐式转换
sql隐式转换 在SQL中,隐式转换是数据库自动进行的类型转换,隐式转换可以帮助我们处理不同类型的数据。 比如,数据表的字段是字符串类型的,传入一个整型的数据,也能够运行sql。 sql隐式转换的弊端 sql隐式转换&…...
Scratch021(画笔)
画笔模块 可以这么理解,画笔模块是Scratch的拓展模块,用它可以完成很多的功能,非常有趣! 案例要求 点击绿旗运行程序,页面显示需要绘制的背景。 可以使用鼠标移动画笔角色,按照顺序点击连线,…...
Leetcode 3387. Maximize Amount After Two Days of Conversions
Leetcode 3387. Maximize Amount After Two Days of Conversions 1. 解题思路2. 代码实现 题目链接:3387. Maximize Amount After Two Days of Conversions 1. 解题思路 这一题思路上其实就是要分别求出day 1以及day 2中原始货币与其他各个货币之间的成交价&…...
机器视觉与OpenCV--01篇
计算机眼中的图像 像素 像素是图像的基本单位,每个像素存储着图像的颜色、亮度或者其他特征,一张图片就是由若干个像素组成的。 RGB 在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0到255之间。 计算机中图像的…...
简单的Java小项目
学生选课系统 在控制台输入输出信息: 在eclipse上面的超级简单文件结构: Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…...
使用layui的table提示Could not parse as expression(踩坑记录)
踩坑记录 报错图如下 原因: 原来代码是下图这样 上下俩中括号都是连在一起的,可能导致解析问题 改成如下图这样 重新启动项目,运行正常!...
区块链共识机制详解
一.共识机制简介 在区块链的交流和学习中,「共识算法」是一个很频繁被提起的词汇,正是因为共识算法的存在,区块链的可信性才能被保证。 1.1 为什么需要共识机制? 所谓共识,就是多个人达成一致的意思。我们生活中充满…...
【Excel】单元格分列
目录 分列(新手友好) 1. 选中需要分列的单元格后,选择 【数据】选项卡下的【分列】功能。 2. 按照分列向导提示选择适合的分列方式。 3. 分好就是这个样子 智能分列(进阶) 高级分列 Tips: 新手推荐基…...
【含开题报告+文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现
开题报告 近年来,随着互联网技术的迅猛发展,人们的生活方式、消费习惯以及信息交流方式都发生了深刻的变化。旅游业作为国民经济的重要组成部分,其信息化、网络化的发展趋势也日益明显。旅游论坛作为旅游信息交流和分享的重要平台࿰…...
微软 Phi-4:小型模型的推理能力大突破
在人工智能领域,语言模型的发展日新月异。微软作为行业的重要参与者,一直致力于推动语言模型技术的进步。近日,微软推出了最新的小型语言模型 Phi-4,这款模型以其卓越的复杂推理能力和在数学领域的出色表现,引起了广泛…...
操作系统课后习题2.2节
操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…...
[小白系列]安装sentence-transformers
python环境为3.13.1执行 pip install sentence-transformers 总是报以下问题 ERROR: Cannot install sentence-transformers0.1.0, sentence-transformers0.2.0, sentence-transformers0.2.1, sentence-transformers0.2.2, sentence-transformers0.2.3, sentence-transformers…...
Python字符串format方法全面解析
在Python中,format方法是一种用于格式化字符串的强大工具。它允许你构建一个字符串,其中包含一些“占位符”,这些占位符将被format方法的参数替换。以下是对format方法用法的详细解释: 基本用法 format方法的基本语法如下&#…...
【Reading Notes】Favorite Articles from 2024
文章目录 1、January2、February3、March4、April5、May6、June7、July8、August9、September10、October11、November12、December 1、January 2、February 3、March Sora外部测试翻车了!3个视频都有Bug( 2024年03月01日) 不仔细看还真看不…...
Python爬虫之Scrapy框架基础入门
Scrapy 是一个用于Python的开源网络爬虫框架,它为编写网络爬虫来抓取网站数据并提取结构化信息提供了一种高效的方法。Scrapy可以用于各种目的的数据抓取,如数据挖掘、监控和自动化测试等。 【1】安装 pip install scrapy安装成功如下所示:…...
spring cloud contract mq测试
对于spring cloud contract的环境配置和部署,请看我之前的文章。 一 生产者测试 测试生产者是否发送出消息,并测试消息内容是否正确。 编写测试合同 测试基类(ContractTestBase)上面要添加下面注解 SpringBootTest AutoConfig…...
Axure原型设计技巧与经验分享
AxureRP作为一款强大的原型设计工具,凭借其丰富的交互设计能力和高保真度的模拟效果,赢得了众多UI/UX设计师、产品经理及开发人员的青睐。本文将分享一些Axure原型设计的实用技巧与设计经验,帮助读者提升工作效率,打造更加流畅、用…...
计算机网络之王道考研读书笔记-1
第 1 章 计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络概念 internet(互连网):泛指由多个计算机网络互连而成的计算机网络。这些网络之间可使用任意通信协议。 Internet(互联网或因特网):指当前全球最大的、开放的、由众多网络和路由器互连…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
