ES结构
集群 节点 分片 ——> https://blog.csdn.net/weixin_43639512/article/details/86736881
ES查询性能调优 ——> https://blog.csdn.net/jbjmh/article/details/139551306
ES查询过程 -- 获取文档ID+根据ID获取文档详细
Elasticsearch 的读取过程是其高效搜索能力的核心,下面我将详细介绍其工作原理: 1. 读取流程概述 客户端请求:应用程序发送查询请求 路由与分发:协调节点接收请求并确定相关分片 分片查询:并行向所有相关分片(主分片或副本)发送查询 结果合并:协调节点收集各分片结果并合并排序 返回结果:将最终结果返回给客户端 2. 读取详细过程 2.1 查询阶段(Query Phase) 查询解析:协调节点解析查询DSL,确定查询类型(全文/精确/聚合等) 分片选择:根据路由信息确定需要查询的分片列表 并行查询: 向所有相关分片(包括副本)发送查询请求 每个分片在本地执行查询 返回匹配文档的ID和排序值(不返回完整文档) 结果合并: 协调节点收集所有分片结果 按照排序规则合并结果集 确定最终文档排名 2.2 取回阶段(Fetch Phase) 文档定位:根据查询阶段确定的文档ID列表 并行获取: 向存储这些文档的分片发送多文档获取请求(Multi-get) 每个分片返回完整文档内容和元数据 结果组装: 协调节点组装最终结果 可能应用高亮、字段过滤等后处理 3. 核心数据结构 3.1 倒排索引(Inverted Index) 词项→文档列表的映射 包含词频、位置等信息 支持快速全文检索 3.2 Doc Values 列式存储结构 用于排序、聚合和脚本访问 默认对所有非text字段启用 3.3 正向索引 文档ID→字段值的映射 用于获取完整文档内容 4. 查询类型与优化 4.1 查询类型 精确查询:Term/Terms查询,直接查找倒排索引 全文查询:Match/Match_phrase,经过分析器处理 复合查询:Bool/Dis_max等组合多个查询 聚合查询:基于Doc Values的统计分析 4.2 查询优化 查询改写:如将某些Bool查询改写为更高效的Filter查询 缓存机制: 查询缓存(Query Cache):缓存查询结果 请求缓存(Request Cache):缓存整个分片级别的结果 字段数据缓存(Fielddata Cache):用于聚合和排序 预过滤:使用Filter上下文跳过相关性评分计算 5. 分片查询策略 5.1 分片选择 根据路由信息确定目标分片 对于搜索请求,默认查询所有分片 可以设置preference参数控制分片选择 5.2 自适应副本选择(ARS) 7.0+版本特性 基于分片副本的响应时间和负载情况智能选择 提高查询性能和集群稳定性 6. 读取一致性 实时获取:通过realtime参数可以读取最新写入但未刷新的文档 版本控制:基于文档版本号避免读取旧数据 刷新控制:手动refresh可使写入立即可查 7. 性能影响因素 分片数量:过多分片增加查询开销 索引设计:合理的字段类型和映射 查询复杂度:嵌套/脚本/模糊查询等开销较大 硬件资源:SSD/I/O吞吐量/内存大小 JVM堆大小:影响缓存可用空间 Elasticsearch 的读取设计通过分布式并行查询、高效数据结构和多层缓存机制,实现了海量数据下的快速检索能力
3. ES写入过程——> https://blog.csdn.net/jbjmh/article/details/139551306
Elasticsearch 写入原理 Elasticsearch 的写入过程是一个复杂但高效的设计,下面我将详细介绍其核心原理: 1. 写入流程概述 客户端请求:应用程序发送文档到 Elasticsearch 路由与转发:请求到达协调节点,根据路由规则确定目标分片 主分片处理:文档首先写入主分片 副本同步:主分片将变更同步到所有副本分片 确认返回:所有副本确认后,返回成功响应给客户端 2. 写入详细过程 2.1 文档接收阶段 客户端可以通过 Index API 或 Bulk API 发送文档 文档首先到达协调节点(Coordinating Node) 协调节点根据文档ID的哈希值确定目标分片 2.2 主分片写入 事务日志(Translog)记录:首先将操作写入Translog,确保持久性 内存缓冲:文档被添加到内存缓冲区(In-memory buffer),此时写入到es内容是不可以查询的 refresh操作:定期(默认1秒)将内存缓冲区内容生成新的segment(可搜索但未持久化) 这使新文档在写入后很快可被搜索到 2.3 副本同步 主分片将变更并行发送到所有副本分片 副本分片执行相同的写入过程(Translog→内存缓冲→refresh) 主分片等待所有副本确认后才返回成功 2.4 持久化过程 flush操作:定期(或基于Translog大小)将内存中的segment写入磁盘 创建一个新的提交点(commit point) 清空Translog(旧的Translog会被删除) segment合并:后台合并小segment为大segment,优化查询性能 3. 关键组件 3.1 倒排索引(Inverted Index) 写入时构建从词项到文档的映射 支持快速全文搜索 3.2 事务日志(Translog) 防止数据丢失的关键组件 所有操作首先写入Translog 在节点崩溃时用于恢复未持久化的数据 3.3 分段(Segment)机制 每个分片由多个不可变的segment组成 新文档写入新segment,旧segment只读 定期合并segment以提高性能 4. 写入优化参数 refresh_interval:控制刷新频率(平衡实时性与吞吐量) translog.durability:async/sync,控制事务日志写入方式 number_of_replicas:副本数量(影响写入性能和数据安全性) bulk API:批量写入大幅提升吞吐量 5. 一致性保证 Elasticsearch 提供不同级别的一致性控制: quorum:大多数分片可用(默认) one:主分片确认即可 all:所有分片必须确认 通过这种设计,Elasticsearch 实现了近实时搜索(NRT)与数据持久性的平衡,同时保证了高可用性和水平扩展能力。
ES写入性能调优——>
https://blog.csdn.net/jbjmh/article/details/139551306
ES脑裂——>
https://blog.csdn.net/qq_40991313/article/details/133942498
浙公网安备 33010602011771号