elaticsearch写操作

新建、索引和删除请求都是写(write)操作。更新也需要写(write)操作。

我们假设有三个节点的集群。它包含一个叫做bblogs的索引并拥有两个主分片。每个主分片有两个复制分片。相同的分片不会放在同一个节点上,所以我们的集群是这样的:

有三个节点一个索引的集群

每个节点都有能力处理任意请求。每个节点都知道任意文档所在的节点,所以也可以将请求转发到需要的节点。下面的例子中,我们将发送所有请求给Node 1,这个节点我们将会称之为 请求节点(requesting node)
elaticsearch写操作_第1张图片
写操作.png

Elasticsearch新建、索引或删除一个文档必要的顺序步骤如下:

  1. 客户端给Node 1发送新建、索引或删除请求。
  1. 节点使用文档的_id确定文档属于分片0。它转发请求到Node 3,分片0位于这个节点上。
  2. Node 3在主分片上执行请求,如果成功,它转发请求到相应的位于Node 1和Node 2的复制节点上。当所有的复制节点报告成功,Node 3报告成功到请求的节点,请求的节点再报告给客户端。

注意:

  • replication默认的值是sync。这将导致主分片得到复制分片的成功响应后才返回。

  • consistency默认主分片在尝试写入时需要规定数量(quorum)或过半的分片(可以是主节点或复制节点)可用。这是防止数据不一致。

  • timeout当分片副本不足时会怎样?Elasticsearch会等待更多的分片出现。默认等待一分钟。如果需要,你可以设置timeout参数让它终止的更早:100表示100毫秒,30s表示30秒。规定数量只有在number_of_replicas大于一时才生效。

局部更新

elaticsearch写操作_第2张图片
局部更新.png

步骤为:

  1. 客户端给Node 1发送更新请求。
  2. 它转发请求到主分片所在节点Node 3。
  3. Node 3从主分片检索出文档,修改_source字段的JSON,然后在主分片上重建索引。如果有其他进程修改了文档,它以retry_on_conflict设置的次数重复步骤3,都未成功则放弃。
  4. 如果Node 3成功更新文档,它同时转发文档的新版本到Node 1和Node 2上的复制节点以重建索引。当所有复制节点报告成功,Node 3返回成功给请求节点,然后返回给客户端。

和写的唯一区别是需要检索出原有文档。

你可能感兴趣的:(elaticsearch写操作)