25.partial update内置乐观锁并发控制
主要知识点
(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内置乐观锁并发控制的更多相关文章
- Elasticsearch学习笔记(八)Elasticsearch的乐观锁并发控制
一.基于_version的乐观锁并发控制 语法:PUT /test_index/test_type/id?version=xxx 更新时带上数据 ...
- ElasticSearch(九)基于version进行乐观锁并发控制
一.基于version进行乐观锁并发控制 1).查看一条document GET /test_version/test_version_type/ { "_index" : &qu ...
- 21.实验基于_version进行乐观锁并发控制
21.实验基于_version进行乐观锁并发控制 主要知识点: 实验基于_version进行乐观锁并发控制 1.实验实战演练基于_version进行乐观锁并发控制 (1)先构造一条数据出来 PUT / ...
- 6:Partial Update 内部原理 和 乐观锁并发控制
Partial Update 内部执行过程: 首先,ES文档是不可变的,它们只能被修改,不能被替换.Update Api 也不例外. Update API 简单使用与之前描述相同的 检索-修改-重建索 ...
- Java多线程之syncrhoized内置互斥锁的用法详解
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827547.html 解决并行冲突最有效的方法就是加同步锁,主要有以下几种方法: 1:动态方法 ...
- 基于external version进行乐观锁并发控制
?version=1?version=1&version_type=external它们的唯一区别在于,_version,只有当你提供的version与es中的_version一模一样的时候, ...
- 20.基于es内部_version进行乐观锁并发控制
- Elasticsearch技术解析与实战(七)Elasticsearch partial update
普通的partial update 1.插入测试数据 PUT /test_index/test_type/10 { "test_field1": "test1" ...
- Elasticsearch学习笔记(九)partial update
一.什么是partial update? PUT /index/type/id,创建文档&替换文档,就是一样的语法 一般对应到应用程序中,每次的执行流程基本是这样的: (1)应用程序先发起一个 ...
随机推荐
- PHP5+标准函数库观察者之实现
PHP的观察者设计模式实现相对简单,可是PHP5+版本号中已经有标准库类库支持,我们仅仅需简单继承并实现就能够了. 观察者:实现标准接口类库SplSubject. 一个注冊方法:attach.一个取消 ...
- USB设备驱动之设备初始化(设备枚举)
USB设备从接入HUB到正常工作之前.都属于设备枚举阶段.所谓设备枚举.就是让host控制器认识USB设备,并为其准备资源.建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所 ...
- 好记性不如烂笔头——DML/DDL/DCL/TCL,OLTP/OLAP
DML:数据操作语言,就是增删改之类的语句 DDL:数据定义语言,创建.修改.删除表等 ALTER 语句 (Transact-SQL) CREATE 语句 (Transact-SQL) DISABLE ...
- luogu1991 无线通讯网
题目大意 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话.任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有 ...
- 使用playonlinux安装windows软件
转载 http://qspy.is-programmer.com/posts/40913.html Wine提供了一个用来运行Windows程序的平台.PlayOnLinux 是使用 Python 写 ...
- 操作系统-虚拟机-百科:VM
ylbtech-操作系统-虚拟机-百科:VM 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. 虚拟系统通过生成现有操作系统的 ...
- vmware centos7 没有网络设备
vmware centos7 没有网络设备 选择VMware 虚拟机模拟器为CentOS 64 即可;
- C语言程序创建文件
#include <stdio.h>#include <stdlib.h>int main() { FILE *fp;if((fp=fopen("g:\\a.txt& ...
- Constructing Roads In JGShining's Kingdom(LIS)
http://acm.hdu.edu.cn/showproblem.php?pid=1025 题意:富人路与穷人路都分别有从1到n的n个点,现在要在富人点与穷人点之间修路,但是要求路不能交叉,问最多能 ...
- [LnOI2019]长脖子鹿省选模拟赛 东京夏日相会
这里来一发需要开毒瘤优化,并且几率很小一遍过的模拟退火题解... 友情提醒:如果你很久很久没有过某一个点,您可以加上特判 可以像 P1337 [JSOI2004]平衡点 / 吊打XXX 那道题目一样 ...