深度解析:Elasticsearch检索请求原理

在上一篇文章中,我们学习了 Elasticsearch 的写入流程,今天我们来学习一下 Elasticsearch 的读取流程,当一个检索请求到达 Elasticsearch 之后是如何进行检索的呢?

下面先说一下一个总的检索流程。

1、客户端发送请求到任意一个节点,该节点就是协调节点。

2、协调节点将查询请求广播到每一个数据节点,这些数据节点的分片就会处理该查询请求。

3、每个分片进行数据查询、将符合条件的数据放在一个队列之中,将这些数据的文档ID节点信息,分片信息返回给协调节点

4、协调节点将所有的结果汇总、排序。

5、协调节点向包含这些文档ID的分片发送 get 请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据整合返回给客户端。

单个文档

对于取回单个文档来说:

1、客户端向 node1 节点发送检索请求。

2、node1 节点通过对传入的文档的 _id 进行计算,确定文档属于分片0,但是分片0的副本分片在三个节点上都存在,在这里,Elasticsearch 将请求转发到了 node2 上(轮询-负载均衡)。

3、node2 节点将文档返回给 node1

4、node1 将文档返回给客户端。

在处理读取请求时,协调结点在每次请求的时候都会通过轮询所有的副本分片来达到负载均衡。

在文档被检索时,已经被索引的文档可能已经存在于主分片上但是还没有复制到副本分片。 在这种情况下,副本分片可能会报告文档不存在,但是主分片可能成功返回文档。 一旦索引请求成功返回给用户,文档在主分片和副本分片都是可用的。

上面是根据ID检索单个文档,流程相对简单,那么如果是多个文档,流程又回增加哪些步骤呢?

多个文档

简单一句话就是,在单个文档的请求中,Elasticsearch 知道该文档在哪个分片上。在多文档请求中,Elasticsearch 会将该请求拆分为多个文档的请求,并把它们并行的发送到对应的分片。

对于多个文档请求,mget 请求顺序:

1、客户端向 node1 发送 mget 请求。

2、node1 节点为每个分片构建多个文档的 get 请求。

3、并行转发这些请求到每个文档对应的主分片或者副本分片的节点上。

4、node1 根据收到的响应返回给客户端。

可以对文档设置单独的 routing 参数。

对于检索流程,看上去就简单很多了,没有那么多的数据一致性等相关限制的处理。

如果感觉本文写的还不错的话欢迎点个关注,后面继续来写代码中的检索实现。一起走进源码的世界。

如有错误也欢迎指出,一起成长。

参考链接

https://www.elastic.co/guide/cn/elasticsearch/guide/current/distrib-read.html

https://www.elastic.co/guide/cn/elasticsearch/guide/current/distrib-multi-doc.html

相关推荐

  1. 深入理解Elasticsearch高效原理

    2024-04-02 16:36:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 16:36:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 16:36:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 16:36:03       82 阅读
  4. Python语言-面向对象

    2024-04-02 16:36:03       91 阅读

热门阅读

  1. 速盾:网络直播cdn不延迟吗?

    2024-04-02 16:36:03       35 阅读
  2. solibity常用语法

    2024-04-02 16:36:03       36 阅读
  3. C语言程序10题

    2024-04-02 16:36:03       26 阅读
  4. socket.io 跨域 cors.origin 的值,用于解决跨域问题

    2024-04-02 16:36:03       31 阅读
  5. 懒汉模式和饿汉模式有什么区别?

    2024-04-02 16:36:03       31 阅读
  6. Qt+OpenGL入门教程(四)——VBO、VAO和EBO

    2024-04-02 16:36:03       34 阅读
  7. electron-vite初遇

    2024-04-02 16:36:03       40 阅读
  8. ps教程谁教的好

    2024-04-02 16:36:03       39 阅读