Elasticsearch版本控制理解
目录
背景
具体使用说明
背景
Elasticsearch 是分布式的。当文档创建、更新或删除时, 新版本的文档必须复制到集群中的其他节点。Elasticsearch 也是异步和并发的,这意味着这些复制请求被并行发送,并且到达目的地时也许 顺序是乱的 。 Elasticsearch 提供了版本 _version 功能,实际上和大多数并发场景处理一样,版本号属于乐观锁的应用范畴
当我们 index , GET 和 delete 请求时,我们指出每个文档都有一个 _version (版本)号,当文档被修改时版本号递增。 Elasticsearch 使用这个 _version 号来确保变更以正确顺序得到执行。如果旧版本的文档在新版本之后到达,它可以被忽略,防止乱序问题带来的覆盖
最佳实践
Elasticsearch 版本类型分为:内部版本 和 外部版本
内部版本号上面介绍的是Elasticsearch的,每次都会_version自动加1。
外部版本号的处理方式和内部版本号的处理方式有些不同,是通过业务方指定传入的版本号, Elasticsearch 会检查当前 _version 是否 小于 指定传入的版本号,如果小于,则更新成功,否则更新失败。
在写入索引的时间,ES提供了指定的版本类型和可以传入的版本号
IndexRequest request = new IndexRequest(indexName, typeName, id);
request.versionType(VersionType.INTERNAL);
request.version(version);
request.routing(routing);
request.timeout(TimeValue.timeValueSeconds(5));
request.source(JSON.toJSONString(data), XContentType.JSON);
return this.index(request);
1.版本类型默认是内部版本号,默认不需要手动指定,版本号会自动加1,如果手动显示指定内部版本类型,并且传入版本号,实际在ES内部不起作用,还是根据当前的 _version 自动加1
2.版本号为外部版本号时,需要指定version,切必须大于现有文档的 _version
内部版本和外部版本在Elasticsearch内部是存储版本号是同一字段 _version,那么在对同一文档在通过不同版本类型覆盖文档时,_version是如何变化的呢
操作步骤 |
操作 |
版本号 |
备注 |
---|---|---|---|
1 |
文档A,先通过内部版本写入 |
_version = 1 |
更新成功,内部版本自动+1 |
2 |
文档A,先通过内部版本覆盖写入 |
_version = 2 |
更新成功,内部版本自动+1 |
3 |
文档A,先通过外部版本覆盖写入,指定版本号 version=2 |
_version = 2 |
更新失败,外部版本号不大于文档当前版本_version |
4 |
文档A,先通过外部版本覆盖写入,指定版本号 version=3 |
_version = 3 |
更新成功,外部版本号大于文档当前版本_version,文档版本更新为传入的version |
5 |
文档A,先通过内部版本覆盖写入 |
_version = 4 |
更新成功,内部版本自动+1 |
实质是按照上面说的一样,如果是内部版本覆盖,直接覆盖版本加1,如果是外部版本覆盖,会比较指定传入的版本号和文档当前版本号,大于则覆盖
Elasticsearch版本控制理解相关推荐
- ElasticSearch 深入理解 三:集群部署设计
ElasticSearch 深入理解 三:集群部署设计 ElasticSearch从名字中也可以知道,它的Elastic跟Search是同等重要的,甚至以Elastic为主要导向. Elastic即可 ...
- Elasticsearch:理解 Elasticsearch Percolate 查询
这篇博文深入探讨了 Elasticsearch 的 percolate query.此机制允许你根据已注册的查询对文档进行分类或标记.起初听起来很奇怪的是一个强大的机制,我们将在这篇文章中深入探讨. ...
- Elasticsearch:理解 Elasticsearch 中的 Percolator 数据类型及 Percolate 查询
Elasticsearch 是功能强大的功能丰富的工具.在今天的文章中,我来介绍一下 Percolator 数据类型.同时也介绍一下 Percolate query. 您需要基本了解 Elastics ...
- Elasticsearch:理解 Master,Elections,Quorum 及 脑裂
集群中的每个节点都可以分配多个角色:master.data.ingest.ml(机器学习)等. 我们在当前讨论中感兴趣的角色之一是 master 角色. 在 Elasticsearch 的配置中,我们 ...
- Elasticsearch:理解 query_string 和 simple_query_string 查询
针对很多的开发者来说,如果你不是很熟悉 DSL 查询,那么在有些情况下,query_string 及 simple_query_string 变得非常灵活及方便.在今天的文章中,我来比较一下这两种查询 ...
- Elasticsearch:理解搜索中的 precision 及 recall
当你负责搜索引擎时,不用多说,你应该充分了解有关搜索相关性的尽可能多的详细信息. 虽然大多数人不需要学习每条信息,但需要了解搜索. 你至少应该对 recall (查全率)和 precision (精度 ...
- Elasticsearch深入理解(十二)——SocketTimeoutException解决方案
一.问题描述: 数据同步服务在写入Elasticsearch索引时,偶发异常. 二.异常信息: java.net.SocketTimeoutException: 30,000 milliseconds ...
- Elasticsearch索引(company)_Centos下CURL增删改
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...
- 基于设计原理与理念和实践的ElasticSearch学习、ELK日志收集、网盘搜索引擎
目录 基于设计原理与理念和实践的ElasticSearch学习 一.ES基础入门 ElasticSearch是什么? ES优点: ES缺点: ElasticSearch应用场景 ElasticSear ...
- elasticsearch权威指南-中文
elasticsearch权威指南-中文 Table of Contents 1. Introduction 2. 入门 i. 是什么 ii. 安装 iii. API iv. 文档 v. 索引 vi. ...
最新文章
- Microbiome:南京农大团队在粘细菌捕食的生态学功能方面取得重要进展
- star不代表一切。React:嘿Vue和Angular!就问你们怕不怕!!
- GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
- 01 前端篇(标签)
- 怎么高效刷LeetCode?
- cocos2dx ios入口类_2.cocos2d-x 第一个项目
- 测试python安装成功_Python在Windows上安装配置测试
- golang cover协程异常
- Arcgis一些操作
- rsync与cwRsync
- 新浪微博开放平台开发-android客户端(1)
- 最新谷歌GOOGLE搜索命令大全
- 【odoo】odoo使用阿里邮箱配置邮件系统
- Windows11设置任务栏为小图标
- EZchip(Tilera) SDN和NFV解决方案
- 制作 macOS High Sierra 正式版 USB 启动盘的方法 (亲测可用)
- 计算机制图孔中心线,机械制图中各种中心线绘制方法.docx
- DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM
- mysql存储图片node_Node.js教程 阿里云mysql如何支持存储emoji表情
- 7-3 奥运排行榜(25 分)
热门文章
- Deepracer 学了就能云驾驭赛车? Deepracer机器学习进阶版干货分享!
- 如何设计实现一个证书加密签名工具包-极客大学架构师训练营(架构师 黄燧)
- fluent设置uds c语言程序,FLUENT---UDS 计算流体停留时间(空气龄)
- 432.全O(1)的数据结构
- 382.链表随机节点
- 【生信进阶练习1000days】day1-Bioconductor的一些补充小用法与Working with Genomic Ranges
- 使用TypoDetect检测相似域名
- Raki的读paper小记:Code and Named Entity Recognition in StackOverflow
- mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
- java对谷歌不兼容_谷歌浏览器不兼容的一些Js