Elasticsearch之CURL命令的version控制
普通关系型数据库使用的是(悲观并发控制(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控制相关推荐
- Elasticsearch之CURL命令的PUT和POST对比
PUT是幂等方法,而POST并不是. PUT用于更新操作,POST用于新增操作比较合适. PUT,DELETE操作是幂等的,所谓幂等就是指不管进行多少次操作,结果都一样. 比如,我用PUT修改一篇文章 ...
- ElasticSearch快速入门三(curl命令讲解)
API测试工具_微博开放平台:https://open.weibo.com/tools/console# 感兴趣是可以使用这个工具玩一下restful接口调用,可以更形象的了解restful 下面我们 ...
- curl命令具体解释
对于windows用户假设用Cygwin模拟unix环境的话,里面没有带curl命令,要自己装,所以建议用Gow来模拟,它已经自带了curl工具,安装后直接在cmd环境中用curl命令就可,由于路径已 ...
- windows下使用curl以及常用curl命令
什么是curl命令 curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在window ...
- Linux 命令(136)—— curl 命令
文章目录 1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 1.命令简介 curl 命令是一个利用 URL 规则在 Shell 终端命令行下工作的文件传输工具.它支持文件的上传和下载, ...
- linux curl命令详解,以及实例
linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道翻 ...
- linux curl命令详解(附使用示例)
Linux curl命令详解 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称u ...
- Linux网络之curl命令详解
curl 是一个工具,用于传输来自服务器或者到服务器的数据.「向服务器传输数据或者获取来自服务器的数据」 可支持的协议有(DICT.FILE.FTP.FTPS.GOPHER.HTTP.HTTPS.IM ...
- 【Linux命令】curl 命令
参考 curl 的用法指南 curl 命令详解(转载) 常用参数详解 参数 描述 -I/–head 只显示传输文档,经常用于测试连接本身 -o/–output 把输出写到该文件中,必须输入保存文件名 ...
最新文章
- ocs(office communications server)通讯簿无法同步的问题集锦及解决方法
- python菜鸟excel教程-Python操作Excel的Xlwings教程(一)
- 有人问我:除了机房工程,你还懂什么?我笑了
- java吧王者_java单排上王者!(一) java内存
- XCTF-高手进阶区:PHP2
- 根据传递函数仿真模拟滤波器的波特图(持续更新中)
- http响应状态码列表
- 服务器安装mysql_阿里云服务器上安装MySQL
- messageformat.format() 自定义参数名_DedeCMS的Java版mcms 第四季之一: 自定义插件
- vs2017安装完成,但有错误。
- Visual Basic .NET中操作MsAgent
- 项目过程管理(十七)结项
- 构建一套完整高效的供应链系统体系
- 数仓中的维度、原子指标、派生指标、衍生指标、指标分类、缓慢变化维等的含义
- “网上下单”生活神技能,寄快递在线下单、查快递实时物流信息
- 从浏览器输入URL到页面显示的过程
- 快狗打车CTO沈剑:如何利用计划管理提升团队效率和产能
- ddb文件怎么打开?PROTEL 99se软件pcb设计下载安装使用教程(5)
- JS的string方法
- 需要用计算机权限才能删除,您需要计算机管理员提供的权限才能对此文件进行更改,删不掉文件怎么处理...