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/_forcemerge
API 来手动触发合并:
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(互联网或因特网):指当前全球最大的、开放的、由众多网络和路由器互连…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...