一、基于version进行乐观锁并发控制

1)、查看一条document

GET /test_version/test_version_type/
{
"_index" : "test_version",
"_type" : "test_version_type",
"_id" : "",
"_version" : ,
"found" : true,
"_source" : {
"test_field" : "test test"
}
}

2)、模拟多并发下,利用version进行更新

同时带上数据的版本号,确保说,es中的数据的版本号,跟客户端中的数据的版本号是相同的,才能修改

PUT /test_version/test_version_type/?version=
{
"test_field": "test client 1"
} {
"_index" : "test_version",
"_type" : "test_version_type",
"_id" : "",
"_version" : ,
"result" : "updated",
"_shards" : {
"total" : ,
"successful" : ,
"failed" :
},
"_seq_no" : ,
"_primary_term" :
}
PUT /test_version/test_version_type/?version=
{
"test_field": "test client 2"
} {
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[test_version_type][1]: version conflict, current version [2] is different than the one provided [1]",
"index_uuid": "VT8uFhvTS_qawAksysahtQ",
"shard": "",
"index": "test_version"
}
],
"type": "version_conflict_engine_exception",
"reason": "[test_version_type][1]: version conflict, current version [2] is different than the one provided [1]",
"index_uuid": "VT8uFhvTS_qawAksysahtQ",
"shard": "",
"index": "test_version"
},
"status":
}

二、基于external version进行乐观锁并发控制

es提供了一个feature,就是说,你可以不用它提供的内部_version版本号来进行并发控制,可以基于你自己维护的一个版本号来进行并发控制。

1)、查看一条document

GET /test_version/test_version_type/
{
"_index" : "test_version",
"_type" : "test_version_type",
"_id" : "",
"_version" : ,
"found" : true,
"_source" : {
"test_field" : "test"
}
}

2)、语法与区别

?version=1
?version=1&version_type=external

version_type=external,唯一的区别在于,_version,只有当你提供的version与es中的_version一模一样的时候,才可以进行修改,只要不一样,就报错;当version_type=external的时候,只有当你提供的version比es中的_version大的时候,才能完成修改

3)、模拟多并发下,利用version进行更新

PUT /test_version/test_version_type/?version=&version_type=external
{
"test_field": "test client 1"
} {
"_index" : "test_version",
"_type" : "test_version_type",
"_id" : "",
"_version" : ,
"result" : "updated",
"_shards" : {
"total" : ,
"successful" : ,
"failed" :
},
"_seq_no" : ,
"_primary_term" :
}
PUT /test_version/test_version_type/?version=&version_type=external
{
"test_field": "test client 2"
} {
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[test_version_type][3]: version conflict, current version [2] is higher or equal to the one provided [2]",
"index_uuid": "VT8uFhvTS_qawAksysahtQ",
"shard": "",
"index": "test_version"
}
],
"type": "version_conflict_engine_exception",
"reason": "[test_version_type][3]: version conflict, current version [2] is higher or equal to the one provided [2]",
"index_uuid": "VT8uFhvTS_qawAksysahtQ",
"shard": "",
"index": "test_version"
},
"status":
}

ElasticSearch(九)基于version进行乐观锁并发控制的更多相关文章

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

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

  2. 关于Hibernate基于version的乐观锁

    刚刚接触SSH框架,虽然可能这个框架已经比较过时了,但是个人认为,SSH作为一个成熟的框架,作为框架的入门还是可以的. 马马虎虎学完了Hibernate的基础,总结一点心得之类的. 学习Hiberna ...

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

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

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

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

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

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

  6. 并发-AtomicInteger源码分析—基于CAS的乐观锁实现

    AtomicInteger源码分析—基于CAS的乐观锁实现 参考: http://www.importnew.com/22078.html https://www.cnblogs.com/mantu/ ...

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

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

  8. AtomicInteger源码分析——基于CAS的乐观锁实现

    AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...

  9. 基于redis的乐观锁实践

    redis真是一个分布式应用场景下的好东西,对于我们的应用设计,功劳大大的! 今天要研究的是基于redis的事务机制以及watch指令(CAS)实现乐观锁的过程. 所谓乐观锁,就是利用版本号比较机制, ...

随机推荐

  1. buffer和cache怎么让你们解释的那么难理解?

    对于一个即将踏上“系统运维”或者更加高大尚的工作“系统调优”,如果这不跟这两哥们搞好关系了,坑的不只有内存,更坑的是你拿着调优的钱却干着随时被调的活.因为作为一个系统运维人员来说监控和优化IO性能这是 ...

  2. Codeforces 403D: Beautiful Pairs of Numbers(DP)

    题意:转换模型之后,就是1~n个数中选k个,放到一个容量为n的背包中,这个背包还特别神奇,相同的物品摆放的位置不同时,算不同的放法(想象背包空间就是一个长度为n的数组,然后容量为1的物体放一个格子,容 ...

  3. java中正则表达式要进行转义的字符。

    /** * 转义正则特殊字符 ($()*+.[]?\^{},|) * * @param keyword * @return */public static String escapeExprSpeci ...

  4. iOS -- 字符串(NSString *)转uint8_t的两种方法

    // 第一种 NSString *connID = ((Collector *)weakSelf.globalMutableArray[i]).orignalConnID; ] intValue]; ...

  5. Android获取状态栏和标题栏的高度

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个 ...

  6. linux的history命令设置

    history的历史记录,同一个用户的各个会话,读取到的内容也是不一样的,原因是它读取的是shell会话缓存里的内容.只有当用户退出当前会话的时候,会话里的缓存内容才会写入~/.bash_histor ...

  7. C++ 用libcurl库进行http通讯网络编程 【转】

    http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html C++ 用libcurl库进行http通讯网络编程 目录索引: 一.Lib ...

  8. python_获得列表中重复的项的索引

    a = ['b','a', 'b', 'c', 'a', 'c','d'] b=[] f=[] for i in a: c=[] for item in enumerate(a): if item[1 ...

  9. 算法 binary search

    // ------------------------------------------------------------------------------------------------- ...

  10. Solaris Samba服务器与DNS服务

    用于文件传输的协议,类似于ftp,ssh,只是它比其他两个好用. Samba协议 NetBIOS :一种编程接口. SMB:server message block .主要作为Microsoft网络通 ...