普通关系型数据库使用的是(悲观并发控制(PCC))

    当我们在修改一个数据前先锁定这一行,然后确保只有读取到数据的这个线程可以修改这一行数据

  

  ES使用的是(乐观并发控制(OCC))  

    ES不会阻止某一数据的访问,然而,如果基础数据在我们读取和写入的间隔中发生了变化,更新就会失败,这时候就由程序来决定如何处理这个冲突。它可以重新读取新数据来进行更新,又或者将这一情况直接反馈给用户。

  ES如何实现版本控制(使用es内部版本号)

    1)首先得到想要修改的文档,获取版本version号

curl -XGET http://master:9200/zhouls/user/2

[hadoop@master elasticsearch-2.4.]$ curl -XGET http://master:9200/zhouls/user/2
{"_index":"zhouls","_type":"user","_id":"","_version":1,"found":true,"_source":{"name" : "john" , "age" : }}[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$

    2)在执行更新操作的时候把版本号传过去

curl -XPUT http://master:9200/zhouls/user/2?version=1  -d  '{"name" : "john1" , "age" : 29}'

[hadoop@master elasticsearch-2.4.]$ curl -XPUT http://master:9200/zhouls/user/2?version=1  -d  '{"name" : "john1" , "age" : 29}'
{"_index":"zhouls","_type":"user","_id":"","_version":,"_shards":{"total":,"successful":,"failed":},"created":false}[hadoop@master elasticsearch-2.4.]$

curl -XPOST http://master:9200/zhouls/user/2/_update?version=2  -d  '{"doc" :{"age" : 30}}'

[hadoop@master elasticsearch-2.4.]$ curl -XPOST http://master:9200/zhouls/user/2/_update?version=2  -d  '{"doc" :{"age" : 30}}'
{"_index":"zhouls","_type":"user","_id":"","_version":,"_shards":{"total":,"successful":,"failed":}}[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$

  

  3)如果传递的版本号和待更新的文档的版本号不一致,则会更新失败。

  现在,待更新文档的版本号是3。我分别传1和穿4进入,都会报更新失败。如下

[hadoop@master elasticsearch-2.4.]$ curl -XPOST http://master:9200/zhouls/user/2/_update?version=2  -d  '{"doc" :{"age" : 30}}'
{"_index":"zhouls","_type":"user","_id":"","_version":,"_shards":{"total":,"successful":,"failed":}}[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$ curl -XPOST http://master:9200/zhouls/user/2/_update?version=1 -d '{"doc" :{"age" : 30}}'
{"error":{"root_cause":[{"type":"version_conflict_engine_exception","reason":"[user][2]: version conflict, current [3], provided [1]","index":"zhouls","shard":""}],"type":"version_conflict_engine_exception","reason":"[user][2]: version conflict, current [3], provided [1]","index":"zhouls","shard":""},"status":}[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$ curl -XPOST http://master:9200/zhouls/user/2/_update?version=4 -d '{"doc" :{"age" : 30}}'
{"error":{"root_cause":[{"type":"version_conflict_engine_exception","reason":"[user][2]: version conflict, current [3], provided [4]","index":"zhouls","shard":""}],"type":"version_conflict_engine_exception","reason":"[user][2]: version conflict, current [3], provided [4]","index":"zhouls","shard":""},"status":}[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$
[hadoop@master elasticsearch-2.4.]$

  更多,请见

Elasticsearch笔记三之版本控制和插件

最新文章

  1. C# 自动Ping 测试服务器运行状况
  2. (转)高性能JavaScript:加载和运行(动态加载JS代码)
  3. JSON TO NSDictionary Mac & iOS
  4. 移除http响应中的多余的头(X-AspNet-Version,Server等)
  5. java的split的坑,会忽略空值
  6. BZOJ4377 : [POI2015]Kurs szybkiego czytania
  7. MINA经典入门例子----Time Server
  8. 创建eclipse新的workspace并设置workspace共享配置
  9. Activity中的四种启动模式
  10. js动画学习(四)
  11. httl开源JAVA模板引擎,动态HTML页面输出
  12. 第一次AOP,附上使用DEMO,目前只供学习,不可用在生产环境
  13. css鼠标样式cursor
  14. 最近完成的AndroidStudio项目实现思路及应用技术
  15. 项目中引入composer
  16. 外媒评李开复的《AI·未来》:四大浪潮正在席卷全球
  17. jQuery轮播图--不使用插件
  18. 找出numpy array数组的最值及其索引
  19. ORACLE数据库入门再在屋里坐会
  20. 只会java,参加acm如何?

热门文章

  1. Ioc思想
  2. 从“菜鸟”码农到“资深”架构师,我到底经历了什么?--------http://baijiahao.baidu.com/s?id=1585813883835208757&wfr=spider&for=pc
  3. Leetcode 87.扰乱字符串
  4. nyoj 95 众数问题(set)
  5. Sql语句中关于如何在like '%?%'中给?赋值
  6. Non-inclusive cache method using pipelined snoop bus
  7. 墨卡托坐标与LBS应用
  8. MVC路由中特殊URL匹配规则
  9. iOS推断当前控制器是否在显示
  10. Openlayers3 计算地图上随意两点间的距离