ElasticSearch-工作流程

 我来答
清宁时光17
2022-07-01 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7186
采纳率:100%
帮助的人:41.8万
展开全部

启动过程
当ElasticSearch节点启动时,使用广播技术来发现同一集群中的其他节点(配置文件中的集群名称)并于它们连接。集群中会有一个节点被选为管理节点(master node),负责集群的状态管理以及在集群拓扑变化时做出反应,分发索引分片至集群的相应节点。

es写数据
1)客户端选择一个node发送请求,这个node就是coordinating node(协调节点)
2)协调节点对document进行路由,将请求转发给对应的node
3)node上的primary shard处理请求,然后将数据同步到replica shard
①先写入内存,并将操作写入translog(数据不能被搜索,translog会在每隔5秒或者每次写入完成后写入磁盘)
②es每隔1秒(配置)进行一个刷新(refresh),写入内存到新数据被写入文件缓存中,并构成一个segement(数据能被搜索,未写入磁盘,可能丢失)
③每隔30分钟或者translog大小达到阈值,触发commit,执行fsync操作,当前translog被删除
(merge:每次refresh都会生成一个segment,segment过多会消耗资源,搜索变慢。A和B两个segment,小segmentC,A,B被读到内存中和Cmerge,生产大segement D,触发commit)
4)返回响应结果给客户端
es删除数据
磁盘上每个segment都有一个.del文件关联,当发送删除请求时,在.del中标记为删除,文档仍能够被搜索到,但会从结果中过滤掉。merge时.del文件中标记但数据不会被包括在新的segment中
es读数据
1)客户端发送请求到协调节点
2)协调节点将请求转发到对应的shard(通过对doc key进行哈希( Murmur哈希算法 ),判断出doc在哪个shard上,然后对该shard查询)
3)每个shard将搜索结果(doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作
4)协调节点根据doc id去各节点拉取document,返回给客户端
es更新数据
创建新文档时,es会为该文档分配一个版本号。对文档但每次更新都会产生一个新的版本号。当执行更新时,旧版本在.del文件中标记删除,并且新版本在新segment中写入索引
并发控制
基于乐观锁和版本号
master选举
①如果集群中存在master,认可该master,加入集群
②如果集群中不存在master,从具有master资格的节点中选id最小的节点作为master
实时性(FileSystem Cache)
一个Index由若干segment组成,搜索时按segment搜索,索引一条segment后,每个段会通过fsync操作持久化到磁盘,而fsync 操作比较耗时。
es中新增的document会被收集到indexing buffer区后被重写成一个segment,然后直接写入FileSystem Cache中,只要sengment文件被写入cache后,这个sengment就可以打开和查询,从而确保在短时间内就可以搜到。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
短说员工论坛
2024-06-04 广告
一般我们搭建员工论坛可以采取以下几种方式:方案1.使用开源免费方案使用通用型的论坛源码,可以使用一些开源源码。相对来说,此类源码很多都是有比较宽松的开源协议,也有很多是免费的。缺点是,有部分源码的开源协议不明确,存在版权风险。另一个是免费的... 点击进入详情页
本回答由短说员工论坛提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式