关于java:Elasticsearch-技术分享-Elasticsearch-存储一条数据-put-过程是什么样子的

37次阅读

共计 1860 个字符,预计需要花费 5 分钟才能阅读完成。

前言

在后面曾经介绍了 ES 中罕用的一些名词,晓得了数据是存储在 shard 中的,而 index 会映射一个或者多个 shard。那这时候我要存储一条数据到某个索引下,这条数据是在哪个 index 下的呢?

公众号:『刘志航』,记录工作学习中的技术、开发及源码笔记;时不时分享一些生存中的见闻感悟。欢送大佬来领导!

ES 演示

所有依照官网教程应用 三条命令,在本机启动三个节点组装成伪集群。

~  % > ./elasticsearch

~  % > ./elasticsearch -Epath.data=data2 -Epath.logs=log2

~  % > ./elasticsearch -Epath.data=data3 -Epath.logs=log3

创立索引

curl -X PUT "localhost:9200/my-index-000001?pretty" -H 'Content-Type: application/json' -d'{"settings": {"index": {"number_of_shards": 3,"number_of_replicas": 2}
  }
}
'

以后版本 7.9

文档地址:https://www.elastic.co/guide/…

ES 默认 number_of_shards 为 1
默认 number_of_replicas 为 1,即一个分片只有一个正本

上面命令能够查看索引信息

curl -X GET "localhost:9200/_cat/indices/my-index-000001?v&s=index&pretty"

存放数据

curl -X PUT "localhost:9200/my-index-000001/_doc/0825?pretty" -H 'Content-Type: application/json' -d'{"name":"liuzhihang"}'

查问数据

curl -X GET "localhost:9200/my-index-000001/_doc/0825?pretty"

文档地址:
https://www.elastic.co/guide/…

一条数据该寄存在哪个 shard

通过命令能够看出:在存放数据时并没有指定到哪个 shard,那数据是存在哪里的呢?

当一条数据进来,会默认会依据 id 做路由

shard = hash(routing) % number_of_primary_shards

从而确定寄存在哪个 shard。routing 默认是 _id,也能够设置其余。

这个 id 能够本人指定也能够零碎给生成, 如果不指定则会零碎主动生成。

put 一条数据的过程是什么样的?

写入过程次要分为三个阶段

  1. 协调阶段:Client 客户端抉择一个 node 发送 put 申请,此时以后节点就是 协调节点(coordinating node)。协调节点依据 document 的 id 进行路由,将申请转发给对应的 node。这个 node 上的是 primary shard。
  2. 次要阶段:对应的 primary shard 解决申请,写入数据,而后将数据同步到 replica shard。

    1. primary shard 会验证传入的数据结构
    2. 本地执行相干操作
    3. 将操作转发给 replica shard
    4. 当数据写入 primary shard 和 replica shard 胜利后,路由节点返回响应给 Client。
  3. 正本阶段:每个 replica shard 在转发后,会进行本地操作。

在写操作时,默认状况下,只须要 primary shard 处于沉闷状态即可进行操作。

在索引设置时能够设置这个属性

index.write.wait_for_active_shards

默认是 1,即 primary shard 写入胜利即可返回。

如果设置为 all 则相当于 number_of_replicas+1 就是 primary shard 数量 + replica shard 数量。就是须要期待 primary shard 和 replica shard 都写入胜利才算胜利。

能够通过索引设置动静笼罩此默认设置。

总结

如何查看数据在哪个 shard 上呢?

curl -X GET "localhost:9200/my-index-000001/_search_shards?routing=0825&pretty"

通过下面命令能够查到数据 0825 的所在 shard。

相干材料

  1. ES 创立索引:https://www.elastic.co/guide/…
  2. ES 查问数据:https://www.elastic.co/guide/…
  3. ES 检索 shard:https://www.elastic.co/guide/…

正文完
 0