ES 版本控制|学习笔记

简介: 快速学习 ES 版本控制。

开发者学堂课程【ElasticSearch 最新快速入门教程 ES 版本控制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/642/detail/10612


ES 版本控制

 

内容介绍:

一、讲义

二、演示

 

一、讲义

ES 版本控制

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

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

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

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

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

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

curl -XGET http://localhost:9200/bigdata/product/1

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

curl-XPUT http://localhost:9200/bigdata/product/1?version=1 -d'{"name":"hadoop" "version":3}’(覆盖)

curl-XPOST http://localhost:9200/bigdata/product/1/update?version=3 -d '{"doc”:{"name":"apache hadoop" ,"latest_version": 2.6}}"(部分更新)

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

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

如果你的数据库已经存在了版本号,或者是可以代表版本的时间戳。这时就可以在 es 的查询 url 后面添加version_type=external来使用这些号码。

注意︰

版本号码必须要是大于0小于9223372036854775807 ( Java 中 long 的最大正值)的整数。

es 在处理外部版本号的时候,它不再检盘 ersion 是否与请求中指定的数值是否相等,而是检查当前的 version 是否比指定的数值小,如果小,则请求成功。

example :

curl-XPUT 'http://localhost:9200/bigdata/product/20?version=10&version_type=external’ -d ‘{“name”: “flink”}’

注意:

此处 url 前后的引号不能省略,否则执行的时候会报错

 

二、演示

输入

curl-XGET ‘http://JANSON01:9200/bigdata/product/_search?pretty’

再来输入

curl-XGET ‘http://JANSON01:9200/bigdata/product/HM9rL2oB300nRXZV6BRB?pretty’

显示查询出的版本号为2

再来进行更新操作,输入

curl -H ‘Content-Type:application/json’ -XPOST ‘Http://JANSON01:9200/bigdata/product/HM9rL2oB300nRXZV6BRB/_updata?pretty&_version=2’ -d ‘{“doc”:{“author”: “楚留香”}}’

结果报错

再来修改为

curl -H ‘Content-Type:application/json’ -XPOST ‘Http://JANSON01:9200/bigdata/product/HM9rL2oB300nRXZV6BRB/_updata?version=2&pretty’ -d ‘{“doc”:{“author”: “楚留香”}}’

结果显示成功

{

"_index" : "bigdata",

"_type" : "product",

"_id" : “HM9rL2oB300nRXZV6BRB",

"_version" : 3,

"result" : "updated",

" _shards" : {

"total" : 2,

"successful" : 1,

"failed" : 0

},

"_seq_no" : 6,

"_primary_term" : 2

}

相关文章
|
Shell Linux API
【Shell 命令集合 文件管理】Linux 移动文件命令 mv命令使用指南
【Shell 命令集合 文件管理】Linux 移动文件命令 mv命令使用指南
555 0
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
8月前
|
移动开发 人工智能 定位技术
用 Godot 开发像素风《饥荒》的流程
用 Godot 开发像素风《饥荒》的流程
|
机器学习/深度学习 算法 Java
通过 Java Vector API 利用 SIMD 的强大功能
通过 Java Vector API 利用 SIMD 的强大功能
639 10
|
运维 Kubernetes Cloud Native
主流定时任务解决方案全横评
定时任务作为一种按照约定时间执行预期逻辑的通用模式,在企业级开发中承载着丰富的业务场景,诸如后台定时同步数据生成报表,定时清理磁盘日志文件,定时扫描超时订单进行补偿回调等。
主流定时任务解决方案全横评
|
存储 监控 大数据
【Elasticsearch专栏 15】深入探索:Elasticsearch使用API删除旧数据
本文探讨了如何使用Elasticsearch API管理并删除旧数据。Elasticsearch提供RESTful API,支持按条件批量删除。删除策略可基于时间、文档数量或索引。通过`DELETE BY QUERY` API,可以根据时间戳范围删除数据,如删除早于30天的记录。为处理大量数据,建议分批次进行,使用`scroll`和`size`参数控制。监控删除进度可使用任务ID。合理运用这些方法能有效优化存储,适应不同业务需求。
511 0
|
SQL
ElasticSearch Script操作数据
ElasticSearch Script操作数据
364 0
|
存储 缓存 监控
10 分钟搞懂缓存设计策略
10 分钟搞懂缓存设计策略
1358 0
|
消息中间件 自然语言处理 Java
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南
接上一篇ElasticSearch 学习笔记(三)-----ES的设计原理以及分词器说明。今天我们主要介绍ES 与SpringBoot 的集成以及项目应用开发指南。
1312 0
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南
|
Linux 网络架构
Linux 路由表解密:详解路由表的构成与作用
Linux 路由表解密:详解路由表的构成与作用
2737 0