Elasticsearch之CURL命令的version控制
2024-09-03 00:13:25
普通关系型数据库使用的是(悲观并发控制(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.]$
更多,请见
最新文章
- C# 自动Ping 测试服务器运行状况
- (转)高性能JavaScript:加载和运行(动态加载JS代码)
- JSON TO NSDictionary Mac & iOS
- 移除http响应中的多余的头(X-AspNet-Version,Server等)
- java的split的坑,会忽略空值
- BZOJ4377 : [POI2015]Kurs szybkiego czytania
- MINA经典入门例子----Time Server
- 创建eclipse新的workspace并设置workspace共享配置
- Activity中的四种启动模式
- js动画学习(四)
- httl开源JAVA模板引擎,动态HTML页面输出
- 第一次AOP,附上使用DEMO,目前只供学习,不可用在生产环境
- css鼠标样式cursor
- 最近完成的AndroidStudio项目实现思路及应用技术
- 项目中引入composer
- 外媒评李开复的《AI·未来》:四大浪潮正在席卷全球
- jQuery轮播图--不使用插件
- 找出numpy array数组的最值及其索引
- ORACLE数据库入门再在屋里坐会
- 只会java,参加acm如何?
热门文章
- Ioc思想
- 从“菜鸟”码农到“资深”架构师,我到底经历了什么?--------http://baijiahao.baidu.com/s?id=1585813883835208757&;wfr=spider&;for=pc
- Leetcode 87.扰乱字符串
- nyoj 95 众数问题(set)
- Sql语句中关于如何在like '%?%'中给?赋值
- Non-inclusive cache method using pipelined snoop bus
- 墨卡托坐标与LBS应用
- MVC路由中特殊URL匹配规则
- iOS推断当前控制器是否在显示
- Openlayers3 计算地图上随意两点间的距离