ElasticSearch增删改查原理

一.基础知识的刨析

1.ElasticSearch中的index

ElasticSearch中的索引(index)是用于组织数据的逻辑命名空监(如数据库)。ElasticSearch的所有默认有5个分片(shard)--当然这是7.x版本之前的特性了。7.x之后新建索引默认都是1个分片。

分片是实际存储数据的lucene索引,它本身就是一个搜索引擎。每个分片可以有零个或多个副本(replicas)默认是1个。ElasticSearch索引还具有‘类型(type)’(如数据库中的表),允许在索引中队数据进行逻辑分区。ES索引给定‘类型(type)’中的所有文档(documents)具有相同的属性(如表的模式)。

前置显示一个由三个主分片组成的ElasticSearch集群,每个主分片分别有一个副本。所有这些分片一起形成一个Elasticsearch索引,每个分片是lucene所有本身。

后者演示了Elasticsearch索引、分片、lucene索引和doc文档之间的逻辑关系。

二、新建索引操作的实现原理--create index

当向协调节点发送请求以索引新文档时,将执行以下操作:

· 所有在Elasticsearch集群中的节点都包含:有关哪个分片存在与于哪个节点上的元数据。协调节点(coordination node)使用doc id(默认)进行路由到对应的分片。路由计算方式:shard=hash(document id)%(num_of_primary_shards)

·当节点接受到来自协调节点的请求时,请求被写入translog,并将该文档添加到内存缓冲区,如果请求在主分片上成功,则请求将并行发送到副本分片。只有在所有主分片和和副本分片上的translog被fsynced后,客户端才会收到该请求成功的确认。

·内存缓冲区以固定的时间间隔刷新(默认时1秒),并将内容写入文件系统缓冲区中的额新段(segment).此分段的内容尚未被fsynced(未被写入文件系统),分段是打开的,内容可被搜索。

·translog被清空,并且文件系统每隔30秒进行fsync,或者当translog变得非常大时进行一次fsync,这个过程在Elasticsearch中承载flush,在刷新过程中,内存缓冲区被清除,内容被写入清除,内容被写入新的文件新段(segement)。当文件segemnt被fsynced并刷新到磁盘,会创建一个新的提交点(其实就是会更新文件偏移量,文件系统会自动触发这个机制执行)。旧的translog被删除,一个新的开始。

三、Update和Delete实现原理

删除和更新操作也是写操作。但是,ElasticSearch中的文档时不可变的(immutable),因此不能删除或修改。

如何删除/更新文档呢?

删除:磁盘上的每个分段(segement)都有一个.del文件与它关联。当客户端发送删除请求时,该文档未被真正删除,而是在.del文件中标记为已删除。此文档仍然可能被搜到,但会从结果中过滤掉。当分段合并时,在.del文件中标记为删除的文档不会包括在新的合并段中。

更新:创建新文件,Elasticsearch将该文档分配一个版本号。对文档的每次更改都会产生一个新的版本号,当执行更新时,旧版本在.del文件中标记为已删除,并且并且在新版本的分片中编入索引。旧版本可能仍然与搜索查询匹配,但是从结果中将其将其过滤掉。

四、Read读的实现阶段

读操作由两个阶段组成:查询阶段(query)和获取阶段(fetch)阶段。

查询阶段

在此阶段,协调节点将搜索请求路由到索引中的所有分片(包括:主分片和副本分片)。分片独立执行搜索,并根据相关性分数创建一个优先级排序结果.所有分片将匹配到的文档和相关性分数的文档id返回给协调节点。协调节点创建一个新的优先级队列,并对全局结果进行排序。可以有很多文档匹配结果,但默认情况下,每个分片将前10个结果发送到协调节点,协调节点创建优先级队列,从所有分片中分选结果并返回前10个匹配结果。

获取阶段

在协调节点对所有的结果进行排序,生成全局排序的文档列表后,它将所有分片请求原始文档。所有的分片都会丰富文档并将其返回到协调几点。

一个请求被分发的过程:

GET .monitoring-es-7-2020.08.12/_search
{
  "query": {
    "match": {
      "index_stats.primaries.query_cache.evictions": true
    }
  }
}

这个请求可能被分发到集群里的任意一个节点:

这时这个节点就成为当前请求的协调这(coordinator),它决定:

1)根据所有信息,判断请求会被路由到哪个核心节点

2)以及哪个副本时可用的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值