ElasticSearch的读写更新数据流程

读数据流程

  1. 客户端向 Node1(协调节点) 发送获取请求。
  2. 节点使用文档的 _id 来确定文档属于分片 0 。分片 0 的副本分片存在于所有的三个节点上。
  3. 为了负载均衡,可以轮询所有节点,最后它将请求转发到 Node 2 。
  4. Node 2 将文档返回给 Node 1 ,然后将文档返回给客户端

 

写数据流程

新建索引和删除请求都是写操作, 必须在主分片上面完成之后才能被复制到相关的副本分片

  1.  客户端向 Node 1 发送新建、索引或者删除请求。
  2. 节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在 Node 3 上。
  3. Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。
  4. 一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功

consistency(一致性)

        在默认设置下,即使仅仅是在试图执行一个写操作之前,主分片都会要求必须要有规定数量的分片副本处于活跃可用状态,才会去执行写操作(其中分片副本 可以是主分片或者副本分片)。这是为了避免在发生网络分区故障(network partition)的时候进行写操作,进而导致数据不一致。 规定数量即: int((primary + number_of_replicas) / 2 ) + 1

onsistency 参数的值可以设为:

  • one :只要主分片状态 ok 就允许执行写操作。
  • all:必须要主分片和所有副本分片的状态没问题才允许执行写操作。
  • quorum:默认值为quorum , 即大多数的分片副本状态没问题就允许执行写操作。

修改数据流程

  1. 客户端向Node 1发送更新请求。
  2. 它将请求转发到主分片所在的Node 3 。
  3. Node 3从主分片检索文档,修改_source字段中的JSON,并且尝试重新索引主分片的文档。如果文档已经被另一个进程修改,它会重试步骤3 ,超过retry_on_conflict次后放弃。
  4. 如果 Node 3成功地更新文档,它将新版本的文档并行转发到Node 1和 Node 2上的副本分片,重新建立索引。一旦所有副本分片都返回成功,Node 3向协调节点也返回成功,协调节点向客户端返回成功。
     

删除/更新数据底层原理

删除操作

        如果是删除操作,commit 的时候会生成一个 .del 文件,里面将某个 doc 标识为 deleted 状态,那么搜索的时候根据 .del 文件就知道这个 doc 是否被删除了。

更新操作

        如果是更新操作,就是将原来的 doc 标识为 deleted 状态,然后新写入一条数据。

物理删除

        buffer 每 refresh 一次,就会产生一个 segment file,所以默认情况下是 1 秒钟一个 segment file,这样下来 segment file 会越来越多。此时会定期执行 merge。每次 merge 的时候,会将多个 segment file 合并成一个同时这里会将标识为 deleted 的 doc 给物理删除掉,然后将新的 segment file 写入磁盘这里会写一个 commit point,标识所有新的 segment file,然后打开 segment file 供搜索使用,同时删除旧的 segment file。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch中,更新数据有几种方式。其中一种方式是通过将旧文档标记为已删除,并增加一个全新的文档来更新数据。虽然无法直接访问旧版本的文档,但它们并不会立即消失。随着索引更多的数据Elasticsearch会在后台清理这些已删除的文档。 另一种方式是使用ElasticSearch提供的丰富的操作数据的API来更新数据。可以使用相同的index API进行实现,通过执行PUT请求来替换现有的文档。这意味着无法直接修改文档,而是需要通过重建索引或替换的方式来更新文档。例如,可以执行以下请求来更新文档:PUT /website/blog/123 { "title": "My first blog entry", "text": "I am starting to get the hang of this...", "date": "2014/01/02" }<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [elasticsearch 更新修改数据(添加和删除字段等)](https://blog.csdn.net/qq_36951116/article/details/113353034)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [关于ElasticSearch更新数据的几种方式](https://blog.csdn.net/weixin_38809962/article/details/79768002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值