es的读取过程是怎么样的?
2 个回答
请优先考虑优先考虑你的人。刘焱ES(Elasticsearch)的数据读取过程可具体总结为以下几个阶段: ### ① 客户端发起请求 客户端通过 REST API 发起读取请求(如搜索请求),通常为 HTTP 请求。 ### ② 协调节点(Coordinating Node)接收并解析请求 ES 集群中负责接收客户端请求的节点称为**协调节点**。 协调节点接收到请求后,会解析请求参数,并确定本次查询涉及的索引和分片。 ### ③ 协调节点确定分片位置并分发请求 协调节点根据索引名称,查找对应的主分片(Primary Shard)及其副本分片(Replica Shard)所在节点位置。 读取操作中,协调节点会随机或轮询地选择一个可用的主分片或副本分片进行查询,实现读负载的均衡分配。 > 注: > - 写请求只能路由到主分片; > - 读请求可以从主分片或任一副本分片中获取数据。 ### ④ 各分片节点执行本地查询 各分片节点收到协调节点的请求后,使用底层的 Lucene 索引引擎: - 在内存缓存(如 Query Cache、Field Data Cache)中快速检索数据; - 如果缓存中无数据,则从磁盘加载索引文件进行搜索; - 每个分片独立执行本地查询,生成自己的查询结果。 ### ⑤ 分片节点返回查询结果 每个分片节点执行完查询后,将结果返回给协调节点。 返回的数据包括命中的文档列表、排序信息、聚合信息等。 ### ⑥ 协调节点汇总并合并结果 协调节点收到所有相关分片的查询结果后,执行最终的数据汇总,包括: - 文档排序; - 聚合计算; - 分页截取。 ### ⑦ 协调节点返回最终结果 协调节点将最终整理后的数据以响应的形式返回给客户端,完成一次完整的读取请求。发布于 2024-12-11 16:41 •IP属地 北京举报评论收藏
为了击碎你伪装的表面,我只能用尽全身力气挥出那惊鸿的半月弧光。云说### 读取过程 客户端发送get请求到任意一个node节点,然后这个节点就称为协调节点, 协调节点对document进行路由,将请求转发到对应的node,此时会使用随机轮询算法,在 primary shard 和replica shard中随机选择一个,让读取请求负载均衡, 接收请求的node返回document给协调节点, 协调节点,返回document给到客户端 ### 基本读模型 在Elasticsearch中,可以通过ID进行非常轻量级的查找,也可以使用复杂的聚合来获取非平凡的 CPU能力。主备份模型的优点之一是它使所有的分片副本保持相同(除了异常情况恢复中)。通 常,一个副本就足以满足读取请求。 当一个节点接收到read请求时,该节点根据路由规则负责将其转发给相应的数据节点,对响应进 行整理,并对客户端作出响应。我们称该节点为该请求的协调节点。基本流程如下: 将读请求路由到到相关的分片节点。注意,由于大多数搜索条件中不包含分片字段,所以它们通常 需要从多个分片组中读取数据,每个分片代表一个不同的数据子集(默认5个数据子集,因为 ElasticSearch默认的主分片个数为5个)。 从每个分片复制组中选择一个副本。读请求可以是复制组中的主分片,也可以是其副本分片。在默 认情况下,ElasticSearch分片组内的读请求负载算法为轮询。 根据第二步选择的各个分片,向选中的分片发送请求。 汇聚各个分片节点返回的数据,然后返回个客户端,注意,如果带有分片字段的查询,将之后转发 给一个节点,该步骤可省略。 异常处理: 当一个碎片不能响应一个read请求时,协调节点将从同一个复制组中选择另一个副本,并向其发 送查询请求。重复的失败会导致没有分片副本可用。在某些情况下,比如搜索,ElasticSearch会 更倾向于快速响应(失败后不重试),返回成功的分片数据给客户端 ,并在响应包中指明哪些分 片节点发生了错误。发布于 2022-11-29 18:45 •IP属地 天津举报评论收藏
公众号进入网站体验更佳

