Partial Update 内部执行过程:
  1. 首先,ES文档是不可变的,它们只能被修改,不能被替换。Update Api 也不例外。
  2. Update API 简单使用与之前描述相同的 检索-修改-重建索引(reindex) 的处理过程。 区别在于这个过程发生在分片内部。
  3. 相当于ES的Shard内部 执行了 Get(获取该文档所有数据),CreateDoc(根据请求生成新文档),Put(把新文档写入ES)。如果使用全量替换,这3个步骤会发生在Java程序里,但如果使用partial update,ES则会帮我们做这些事。
 
Partial Update的好处:
  1. 把原来的3次网络请求转换为1次,降低网络负荷
  2. 使Java程序逻辑变得简单
  3. 由于 检索 和 重建索引 发生在 shard内,这两个步骤时间间隔小,大大降低冲突的可能
 
并发问题:
    1. 检索 和 重建索引(reindex) 步骤的间隔越小,变更冲突的机会越小。 但是它并不能完全消除冲突的可能性。 还是有可能在 update 设法重新索引之前,来自另一进程的请求修改了文档。
    2. 因此,ES内部也参照Java步骤,实现了基于version的乐观锁控制并发。
    3. 我们可以对ES内部的乐观锁,设置一些参数:
    并发冲突后,允许重试的次数:retry_on_conflict
POST /test_index/test_type/1/_update?retry_on_conflict=5
{
    "doc":{
        "num":20
    }
}
 

6:Partial Update 内部原理 和 乐观锁并发控制的更多相关文章

  1. 20.基于es内部_version进行乐观锁并发控制

  2. 25.partial update内置乐观锁并发控制

    主要知识点     (1)partial update内置乐观锁并发控制 (2)retry_on_conflict post /index/type/id/_update?retry_on_confl ...

  3. ElasticSearch(九)基于version进行乐观锁并发控制

    一.基于version进行乐观锁并发控制 1).查看一条document GET /test_version/test_version_type/ { "_index" : &qu ...

  4. Elasticsearch学习笔记(八)Elasticsearch的乐观锁并发控制

    一.基于_version的乐观锁并发控制                 语法:PUT /test_index/test_type/id?version=xxx             更新时带上数据 ...

  5. 21.实验基于_version进行乐观锁并发控制

    21.实验基于_version进行乐观锁并发控制 主要知识点: 实验基于_version进行乐观锁并发控制 1.实验实战演练基于_version进行乐观锁并发控制 (1)先构造一条数据出来 PUT / ...

  6. 基于external version进行乐观锁并发控制

    ?version=1?version=1&version_type=external它们的唯一区别在于,_version,只有当你提供的version与es中的_version一模一样的时候, ...

  7. Elasticsearch由浅入深(五)_version乐观锁、external version乐观锁、partial update、groovy脚本实现partial update

    基于_version进行乐观锁并发控制 先构造一条数据出来 PUT /test_index/test_type/ { "test_field": "test test&q ...

  8. ES 26 - 通过partial update局部更新索引文档 (partial update增量修改原理)

    目录 1 什么是partial update 1.1 全量修改文档的原理 1.2 修改指定field的思路 1.3 partial update的优势 1.4 partial update的使用 2 ...

  9. Elasticsearch系列---并发控制及乐观锁实现原理

    概要 本篇主要介绍一下Elasticsearch的并发控制和乐观锁的实现原理,列举常见的电商场景,关系型数据库的并发控制.ES的并发控制实践. 并发场景 不论是关系型数据库的应用,还是使用Elasti ...

随机推荐

  1. Eclipse 高亮显示(pydev 编辑 python)

    因为是使用pydev编辑的python,所以需要修改(pydev)的属性. Window->Preferences->General->Editors->Text Editor ...

  2. Hadoop(五)—— HDFS NameNode、DataNode工作机制

    一.NN与2NN工作机制 NameNode(NN) 1.当HDFS启动时,会加载日志(edits)和镜像文件(fsImage)到内存中. 2-4.当元数据的增删改查请求进来时,NameNode会先将操 ...

  3. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

  4. md5签名加密(用于java 后台调用短信平台接口实现发短信)

    MD5Util 方法 package com.funcanteen.business.action.pay.util; import java.security.MessageDigest; publ ...

  5. implement a list using Rust

    Rust果然比較複雜,在經歷了n次compile fail,終于寫成了一個 list 難點: 對Rc<>的用法不熟悉.對borrow checker不夠熟悉 有些寫法可能還不是最短的 us ...

  6. nginx-rtmp

    最近使用ffmpeg推流为rtmp,进行直播.记录一下nginx-rtmp的配置.因为我们要添加ngin-rtmp模块,所以不能直接apt安装. 下载niginx和nginx-rtmp-module的 ...

  7. openresty开发系列35--openresty执行流程之5内容content阶段

    openresty开发系列35--openresty执行流程之5内容content阶段 content 阶段 ---init阶段---重写赋值---重写rewrite---access content ...

  8. 事务管理(ACID)和事务的隔离级别

    https://blog.csdn.net/dengjili/article/details/82468576 谈到事务一般都是以下四点 原子性(Atomicity)原子性是指事务是一个不可分割的工作 ...

  9. 【Java】单点登录(SSO)

    单点登录介绍 ​ SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一 ...

  10. django安装使用xadmin

    Xadmin介绍 直接替换掉Django自带的admin系统,并提供了很多有用的东西:完全的可扩展的插件支持,基于Twitter Bootstrap的漂亮UI. 完全替代Django admin 支持 ...