目录

背景

具体使用说明


背景

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版本控制理解相关推荐

  1. ElasticSearch 深入理解 三:集群部署设计

    ElasticSearch 深入理解 三:集群部署设计 ElasticSearch从名字中也可以知道,它的Elastic跟Search是同等重要的,甚至以Elastic为主要导向. Elastic即可 ...

  2. Elasticsearch:理解 Elasticsearch Percolate 查询

    这篇博文深入探讨了 Elasticsearch 的 percolate query.此机制允许你根据已注册的查询对文档进行分类或标记.起初听起来很奇怪的是一个强大的机制,我们将在这篇文章中深入探讨. ...

  3. Elasticsearch:理解 Elasticsearch 中的 Percolator 数据类型及 Percolate 查询

    Elasticsearch 是功能强大的功能丰富的工具.在今天的文章中,我来介绍一下 Percolator 数据类型.同时也介绍一下 Percolate query. 您需要基本了解 Elastics ...

  4. Elasticsearch:理解 Master,Elections,Quorum 及 脑裂

    集群中的每个节点都可以分配多个角色:master.data.ingest.ml(机器学习)等. 我们在当前讨论中感兴趣的角色之一是 master 角色. 在 Elasticsearch 的配置中,我们 ...

  5. Elasticsearch:理解 query_string 和 simple_query_string 查询

    针对很多的开发者来说,如果你不是很熟悉 DSL 查询,那么在有些情况下,query_string 及 simple_query_string 变得非常灵活及方便.在今天的文章中,我来比较一下这两种查询 ...

  6. Elasticsearch:理解搜索中的 precision 及 recall

    当你负责搜索引擎时,不用多说,你应该充分了解有关搜索相关性的尽可能多的详细信息. 虽然大多数人不需要学习每条信息,但需要了解搜索. 你至少应该对 recall (查全率)和 precision (精度 ...

  7. Elasticsearch深入理解(十二)——SocketTimeoutException解决方案

    一.问题描述: 数据同步服务在写入Elasticsearch索引时,偶发异常. 二.异常信息: java.net.SocketTimeoutException: 30,000 milliseconds ...

  8. Elasticsearch索引(company)_Centos下CURL增删改

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...

  9. 基于设计原理与理念和实践的ElasticSearch学习、ELK日志收集、网盘搜索引擎

    目录 基于设计原理与理念和实践的ElasticSearch学习 一.ES基础入门 ElasticSearch是什么? ES优点: ES缺点: ElasticSearch应用场景 ElasticSear ...

  10. elasticsearch权威指南-中文

    elasticsearch权威指南-中文 Table of Contents 1. Introduction 2. 入门 i. 是什么 ii. 安装 iii. API iv. 文档 v. 索引 vi. ...

最新文章

  1. Microbiome:南京农大团队在粘细菌捕食的生态学功能方面取得重要进展
  2. star不代表一切。React:嘿Vue和Angular!就问你们怕不怕!!
  3. GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
  4. 01 前端篇(标签)
  5. 怎么高效刷LeetCode?
  6. cocos2dx ios入口类_2.cocos2d-x 第一个项目
  7. 测试python安装成功_Python在Windows上安装配置测试
  8. golang cover协程异常
  9. Arcgis一些操作
  10. rsync与cwRsync
  11. 新浪微博开放平台开发-android客户端(1)
  12. 最新谷歌GOOGLE搜索命令大全
  13. 【odoo】odoo使用阿里邮箱配置邮件系统
  14. Windows11设置任务栏为小图标
  15. EZchip(Tilera) SDN和NFV解决方案
  16. 制作 macOS High Sierra 正式版 USB 启动盘的方法 (亲测可用)
  17. 计算机制图孔中心线,机械制图中各种中心线绘制方法.docx
  18. DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM
  19. mysql存储图片node_Node.js教程 阿里云mysql如何支持存储emoji表情
  20. 7-3 奥运排行榜(25 分)

热门文章

  1. Deepracer 学了就能云驾驭赛车? Deepracer机器学习进阶版干货分享!
  2. 如何设计实现一个证书加密签名工具包-极客大学架构师训练营(架构师 黄燧)
  3. fluent设置uds c语言程序,FLUENT---UDS 计算流体停留时间(空气龄)
  4. 432.全O(1)的数据结构
  5. 382.链表随机节点
  6. 【生信进阶练习1000days】day1-Bioconductor的一些补充小用法与Working with Genomic Ranges
  7. 使用TypoDetect检测相似域名
  8. Raki的读paper小记:Code and Named Entity Recognition in StackOverflow
  9. mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
  10. java对谷歌不兼容_谷歌浏览器不兼容的一些Js