Elasticsearch的并发控制策略

文章目录

  • 利用external对版本号进行外部控制
  • 利用if_seq_no和if_primary_term作为唯一标识来避免版本冲突

  • ES中的文档是不可变更的。如果你更新一个文档,会将就文档标记为删除,同时增加一个全新的文档。同时文是的version字段加1
  • 内部版本控制
    • If_seq_no + If_primary_term
  • 使用外部版本(使用其他数据库作为主要数据存储)
    • version + version_type=external

利用external对版本号进行外部控制

当使用external版本类型时,Elasticsearch在处理索引请求时会对比传入文档的版本号和已存储文档的版本号。如果传入的版本号大于已存储的,就表明这是一个新版本的文档,Elasticsearch则会执行索引操作并更新文档的版本号。然而,如果传入的版本号小于或等于已有版本号,这就意味着可能存在并发修改的问题,Elasticsearch会认为发生了版本冲突,索引操作将被拒绝。

下面进行实战演练。在没有开启external模式的情况下执行如下命令。

DELETE products
PUT productsPUT products/_doc/1
{"title":"iphone","count":100
}GET products/_doc/1PUT products/_doc/1?version=2
{"title":"iphone","count":100
}

在这里插入图片描述

这表明内部版本控制不能使用乐观锁,也就是说,不能直接使用version,而需要使用if_seq_no和if_primary_term

如果开启了external模式,则执行如下命令。

PUT products/_doc/1?version=2&version_type=external
{"title":"iphone","count":100
}

在这里插入图片描述
与不用external相比,使用external后可以基于version进行文档更新操作。external_gt和external_gte在Elasticsearch中被用于控制版本冲突。简单来说,利用这种方式,只有当给定的版本号大于(gt)或大于等于(gte)当前版本号时,才会执行更新或索引操作

利用if_seq_no和if_primary_term作为唯一标识来避免版本冲突

DELETE products
PUT productsPUT products/_doc/1
{"title":"iphone","count":100
}GET products/_doc/1PUT products/_doc/1?if_seq_no=1&if_primary_term=1
{"title":"iphone","count":100
}

在这里插入图片描述
在执行索引写入操作时,Elasticsearch会检查传入的if_seq_no和if_primary_term是否与最后一次修改文档的序列号(seq no)和主要项(primary term)匹配。这两个参数共同提供了一种强大的控制机制,确保只有当所提供的版本信息与文档的最新状态一致时,才会执行写入操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706210.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

食堂供餐 - 二分查找

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、补充说明四、java代码五、测试用例 前言 本人最近再练习算法,所以会发布自己的解题思路,希望大家多指教 一、题目描述 某公司员工食堂以盒饭的方式供餐。 为将员工取…

【GESP试卷】2024年03月Scratch三级试卷

2024年GESP03月认证Scratch三级试卷 分数:100 题数:27 一、单选题(共15题,每题2分,共30分) 010203040506070809101112131415CBACADDADCBCBAB 1、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙&…

Java刷题-基础篇

目录 题目1:改变原有数组元素的值 题目2:奇数位于偶数之前 题目3:两数之和 题目4:只出现一次的数字 题目5:多数元素 题目6:存在连续三个奇数的数组 题目1:改变原有数组元素的值 题目详细…

C++基础与函数解析 | 函数的声明与定义 | 函数调用 | 函数详解 | 函数重载 | 重载解析 | 递归函数 | 内联函数 | 函数指针

文章目录 一、函数基础1.基本函数定义2.函数的声明与定义3.函数调用 二、函数详解1.参数2.函数体3.返回类型 三、函数重载与重载解析1.函数重载2.重载解析 四、函数相关的其他内容1.递归函数2.内联函数3.constexpr函数(C11起)4.consteval 函数 (C20 起 )…

什么是直接内存(NIO)

直接内存不受 JVM 内存回收管理,是虚拟机的系统内存,常见于 NIO 操作时,用于数据 缓冲区,分配回收成本较高,但读写性能高,不受 JVM 内存回收管理。 举例 当上传一个较大文件(200M)…

构建智能电子商务系统:数字化引领未来商业发展

随着互联网技术的飞速发展和消费者行为的变革,电子商务系统的重要性日益凸显。在这一背景下,构建智能电子商务系统成为推动商业数字化转型的关键举措。本文将深入探讨智能电子商务系统的构建与优势,助力企业把握数字化转型的主动权。 ### 智…

Vue3商城后台管理实战-用户登录界面设计

界面设计 此时界面的预览效果如下&#xff1a; 登录界面的完整代码如下&#xff1a; <script setup> import {reactive} from "vue/reactivity";const form reactive({username: "",password: "", })const onSubmit () > {} <…

位运算概述

首先 位运算这个东西在考试中十分容易考&#xff0c;所以要多多看一看位运算的相关知识&#xff0c;多刷一刷题之类的。 位运算的概念 位运算就是二进制数据进行运算的运算符。 注意&#xff1a;通常我们用二进制补码来表示&#xff0c;补码的符号位也是要参与运算的。 通常的…

Hadoop 3.4.0 项目实战

1环境基于 上一篇搭建 高可用分布式集群 2 官方提供MapReduce程序 #评估圆周率 cd /data/hadoop/share/hadoop/mapreduce/ hadoop jar hadoop-mapreduce-examples-3.4.0.jar pi 2 6 3 实例项目分析1 #预分析的文件如&#xff0c;如单词统计 # #上传文件到hdfs hdfs …

高通QCS6490开发(四):FV01 AI开发板系统烧录

本期主要介绍如何在FV01开发板上烧录镜像 所用硬件有&#xff1a; FV01开发板和type C线 操作步骤如下&#xff1a; 首先连接电源线开机&#xff0c;然后通过Type C线连接FV01开发板和PC&#xff0c;接线如下&#xff1a; 1&#xff09;将设备通过如下命令进入到EDL紧急下载…

三.使用HashiCorp Vault工具管理数据库

三.ubuntu安装使用HashiCorp Vault工具管理数据库 HashiCorp Vault 是一个基于身份的秘密和加密管理系统。机密是您想要严格控制访问的任何内容,例如 API 加密密钥、密码和证书。Vault 提供由身份验证和授权方法门控的加密服务。使用 Vault 的 UI、CLI 或 HTTP API,可以安全…

Web3与物联网:构建智能连接的数字世界

引言 随着互联网的不断发展&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;作为一种新兴的信息技术&#xff0c;正在逐渐渗透到我们的生活和工作中。而随着Web3的兴起&#xff0c;物联网将迎来新的发展机遇。本文将探讨Web3与物联网的结合&#xff0c;如何…