ElasticSearch-2

本文最后更新于:2020年12月4日 凌晨

ElasticSearch是一个分布式文档型数据库

Es是如何存储、检索数据的?

在了解Es的存储机制,先要了解什么是集群(cluster)、节点(node)和分片(shard)。

集群
当我们启动一个单独的Es节点时,就形成了一个集群,只不过在这个集群中只有一个节点(集群和分布式的区别在于集群是一个整体概念,即客户端对待集群适当做一个业务整体;分布式强点的则是“分”,整个业务被分成多个子业务,在不同的节点完成。)

节点
Es集群中的每一个节点就是一个Es实例,都可以单独完成Es的全部业务操作。它们具有相同的cluster.name,它们协同工作,分享数据和负载。

分片
分片是一个最小级别的“工作单元”,它保存了索引中所有数据的一部分,每个“分片”分为主分片和副本分片。同时每一个分片还是一个Lucene实例,其本身就是一个完整的搜索引擎。我们的文档被存贮在分片中,并且在分片中被索引,但是应用程序不会直接和分片进行交互,而是跟索引进行交互。这里的作引就可以被认为是一个或多个分片的“逻辑命名空间”。

集群

启动一个Es集群,该集群中有10个节点分布在不同的服务器上,每个节点中默认含有5个分片,每个分片有1个副本。副本分片和主分片在一个节点上的意义不大,所以在集群中,Master节点会自动调整每个节点中的分片数量和类型。当每个主分片都启动成功,且副分片也启动成功,此时的集群健康状态为blue;当主分pain启动成功,但是副分片没有全部启动成功,集群的健康状态为yello;当主节点没有完全启动成功,集群的健康状态为red

存储过程
1、客户端向集群中的client_node发送新建、索引和删除请求。
2、节点根据文档_id计算出文档属于的分片,假设为分片2,分片2 在node 3,则客户端节点转发请求至node 3.
3、node 3在主分片上执行请求,如果执行成功,则转发该请求至分布分片。当所有的副本节点执行成功返回报告后,node 3报告client_node执行成功。

client_node上看到执行报告时,文档的修改已经生效。从上面的存储过程可以看出,Es存储的数据是分布在整个集群中的。

检索过程
1、client_node向集群中的所有节点发送检索请求。
2、每个节点在自己的分片中遍历检索数据,将结果进行排序并返回给client_node
3、client_node将返回的结果进行相关性排序,返回给用户。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!