主要知识点

 
 

(1)partial update内置乐观锁并发控制

(2)retry_on_conflict

post /index/type/id/_update?retry_on_conflict=5&version=6

 
 

一、一般情况下partial update实现过程

用户直接修改field,然后发送给应用程序,由应用程序直接发送给ES,和全量替换相比,全量替换要先去es进行查找,把查找的数据返回给应用程序,然后再次返回给用户界面,只有这样用户才知道要替换什么,partial update少了先查找的这一步。在es内部,由es先把原来旧的数据查找出来(得到数据和_version值),partial update的数据更新到这份数据中(带着_version值),然后把原来旧的数据标记为deleted,把新的数据进行替换。由此可以看出,用户是用的partial update,但是在ES内部,仍然是全量替换。但是在替换过程中仍然遵循乐观锁的控制策略。

二、并发情况下partial update实现过程

线程1取得es中的一条数据,此时_version=1,取得这条数据时对他进行partial update,

在线程1取得es中的数据后,线程二也取得该数据,并对该数据进行了修改,并写回了es,此时es中该数据的_version=2,

当线程1把他取的数据进行修改后,重新写回es时,所带的_version =1 ,因为此时es中_version=2,所以修改不成功,es自动将该次partial update fail掉,也就是这种情况下线程一的修改被es自动忽略。es内部会自动执行乐观锁的并发控制策略。

三、当_verion冲突时的办法

线程一写回数据时产生_version冲突,在这种情况下,就可以用以下语法:

1、post /index/type/id/_update?retry_on_conflict=5

retry策略:

(1)
再次获取该document的数据和最新的版本号

(2)
基于最新的版本号再次去更新,如果成功就OK

(3) 如果不成功就再一次执行1和2的步骤,最多执行5次。

2、post /index/type/id/_update?retry_on_conflict=5&version=6

指定版本号,也就是说当这次更新成功后的版本号就是6

 
 

 
 

25.partial update内置乐观锁并发控制的更多相关文章

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

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

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

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

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

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

  4. 6:Partial Update 内部原理 和 乐观锁并发控制

    Partial Update 内部执行过程: 首先,ES文档是不可变的,它们只能被修改,不能被替换.Update Api 也不例外. Update API 简单使用与之前描述相同的 检索-修改-重建索 ...

  5. Java多线程之syncrhoized内置互斥锁的用法详解

       转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827547.html    解决并行冲突最有效的方法就是加同步锁,主要有以下几种方法:   1:动态方法 ...

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

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

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

  8. Elasticsearch技术解析与实战(七)Elasticsearch partial update

    普通的partial update 1.插入测试数据 PUT /test_index/test_type/10 { "test_field1": "test1" ...

  9. Elasticsearch学习笔记(九)partial update

    一.什么是partial update? PUT /index/type/id,创建文档&替换文档,就是一样的语法 一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个 ...

随机推荐

  1. 一键免费升级Windows 10

    2015年3月18日,在深圳召开的微软Windows硬件project产业创新峰会(WinHEC)发布了一些震撼消息. 微软计划于今年夏天正式推出Windows 10操作系统.将在190个国家发布,总 ...

  2. update_notifier 造成nodejs进程数量增长的问题

    最近运维老大j哥找到我说了一个事儿:某私有化部署的线上环境nodejs进程数量多达1000+,对比公版线上环境的66个进程数显得十分诡异.并且单个nodejs进程所占用swap空间也较大,也不释放空间 ...

  3. C++对象模型——关于对象(第一章)

    第一章    关于对象 在C语言中,"数据"和"处理数据的操作(函数)"是分开声明的,也就是说,语言本身并没有支持"数据和函数"之间的关联性 ...

  4. 对扩展openflow协议的一点思考

         软件定义X变得越来越火,正所谓,Software is eating the world. 软件定义网络也是如此.不论是在工业界还是学术界都将是一次伟大的革命,都在紧随着这个行业的方向,找自 ...

  5. CentOS-6.5安装配置Tomcat-7

    https://my.oschina.net/u/593517/blog/304483 http://blog.csdn.net/lgh0824/article/details/51194116 摘要 ...

  6. bzoj4034 [HAOI2015]树上操作——树链剖分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4034 树剖裸题: 一定要注意 long long !!! update 的时候别忘了 pus ...

  7. How to build CppCMS 1.x.x

    How to build CppCMS 1.x.x Requirements Mandatory Requirements Recommended Dependencies Suggested Dep ...

  8. Java图形用户界面编程

    1.Java图形用户界面编程概述 JavaAPI中提供了两套组件用于支持编写图形用户界面:AWT(抽象窗口包)和Swing 2.  容器(Container):重量级容器和轻量级容器(一个容器可以放置 ...

  9. ul和li里面的list-style

    对ul   list-type  只是设置ul的样式对li    list-type 是对li的综合样式设定  语法是 li-style:list-style-type/list-style-imag ...

  10. codevs1060 搞笑世界杯(概率dp)

    1060 搞笑世界杯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界 ...