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

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

  

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

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

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

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

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

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

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

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

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

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

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

  

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

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

[hadoop@master elasticsearch-2.4.0]$ curl -XPOST http://master:9200/zhouls/user/2/_update?version=2  -d  '{"doc" :{"age" : 30}}'
{"_index":"zhouls","_type":"user","_id":"2","_version":3,"_shards":{"total":2,"successful":2,"failed":0}}[hadoop@master elasticsearch-2.4.0]$
[hadoop@master elasticsearch-2.4.0]$
[hadoop@master elasticsearch-2.4.0]$ 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":"2"}],"type":"version_conflict_engine_exception","reason":"[user][2]: version conflict, current [3], provided [1]","index":"zhouls","shard":"2"},"status":409}[hadoop@master elasticsearch-2.4.0]$
[hadoop@master elasticsearch-2.4.0]$
[hadoop@master elasticsearch-2.4.0]$ 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":"2"}],"type":"version_conflict_engine_exception","reason":"[user][2]: version conflict, current [3], provided [4]","index":"zhouls","shard":"2"},"status":409}[hadoop@master elasticsearch-2.4.0]$
[hadoop@master elasticsearch-2.4.0]$
[hadoop@master elasticsearch-2.4.0]$ 

  更多,请见

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

Elasticsearch之CURL命令的version控制相关推荐

  1. Elasticsearch之CURL命令的PUT和POST对比

    PUT是幂等方法,而POST并不是. PUT用于更新操作,POST用于新增操作比较合适. PUT,DELETE操作是幂等的,所谓幂等就是指不管进行多少次操作,结果都一样. 比如,我用PUT修改一篇文章 ...

  2. ElasticSearch快速入门三(curl命令讲解)

    API测试工具_微博开放平台:https://open.weibo.com/tools/console# 感兴趣是可以使用这个工具玩一下restful接口调用,可以更形象的了解restful 下面我们 ...

  3. curl命令具体解释

    对于windows用户假设用Cygwin模拟unix环境的话,里面没有带curl命令,要自己装,所以建议用Gow来模拟,它已经自带了curl工具,安装后直接在cmd环境中用curl命令就可,由于路径已 ...

  4. windows下使用curl以及常用curl命令

    什么是curl命令 curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在window ...

  5. Linux 命令(136)—— curl 命令

    文章目录 1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 1.命令简介 curl 命令是一个利用 URL 规则在 Shell 终端命令行下工作的文件传输工具.它支持文件的上传和下载, ...

  6. linux curl命令详解,以及实例

    linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道翻 ...

  7. linux curl命令详解(附使用示例)

    Linux curl命令详解 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称u ...

  8. Linux网络之curl命令详解

    curl 是一个工具,用于传输来自服务器或者到服务器的数据.「向服务器传输数据或者获取来自服务器的数据」 可支持的协议有(DICT.FILE.FTP.FTPS.GOPHER.HTTP.HTTPS.IM ...

  9. 【Linux命令】curl 命令

    参考 curl 的用法指南 curl 命令详解(转载) 常用参数详解 参数 描述 -I/–head 只显示传输文档,经常用于测试连接本身 -o/–output 把输出写到该文件中,必须输入保存文件名 ...

最新文章

  1. ocs(office communications server)通讯簿无法同步的问题集锦及解决方法
  2. python菜鸟excel教程-Python操作Excel的Xlwings教程(一)
  3. 有人问我:除了机房工程,你还懂什么?我笑了
  4. java吧王者_java单排上王者!(一) java内存
  5. XCTF-高手进阶区:PHP2
  6. 根据传递函数仿真模拟滤波器的波特图(持续更新中)
  7. http响应状态码列表
  8. 服务器安装mysql_阿里云服务器上安装MySQL
  9. messageformat.format() 自定义参数名_DedeCMS的Java版mcms 第四季之一: 自定义插件
  10. vs2017安装完成,但有错误。
  11. Visual Basic .NET中操作MsAgent
  12. 项目过程管理(十七)结项
  13. 构建一套完整高效的供应链系统体系
  14. 数仓中的维度、原子指标、派生指标、衍生指标、指标分类、缓慢变化维等的含义
  15. “网上下单”生活神技能,寄快递在线下单、查快递实时物流信息
  16. 从浏览器输入URL到页面显示的过程
  17. 快狗打车CTO沈剑:如何利用计划管理提升团队效率和产能
  18. ddb文件怎么打开?PROTEL 99se软件pcb设计下载安装使用教程(5)
  19. JS的string方法
  20. 需要用计算机权限才能删除,您需要计算机管理员提供的权限才能对此文件进行更改,删不掉文件怎么处理...

热门文章

  1. python excel读取出错_python读取excel数据出错
  2. 粤东农批项目座谈会 农业大健康·李喜贵:功能性农业差异化加工
  3. iOS 键盘遮挡输入框万能解决方案(多个输入框)
  4. 最大并发连接数和最大会话数的区别
  5. 递归找出文件夹里面所有文件
  6. OpenGL ES 3.0之Texturing纹理详解(二)
  7. 安卓笔记--intent传值不更新问题
  8. Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
  9. ConditionedActivityGroup
  10. 后台产品经理跳坑“指南”