ElasticSearch之并发操作处理

news/2024/7/7 5:52:19 标签: elasticsearch, 并发控制, 乐观锁, seq_no

写在前面

在这里插入图片描述

并发控制,一般有两种方案,悲观锁和乐观锁,其中悲观锁是默认每次更新操作肯定会冲突,所以每次操作都要先获取锁,操作完毕再释放锁,适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突,所以在更新前和更新后都不需要获取锁和释放锁的操作,所以效率更高,适合于读多写少的场景中。

在es中采用的是乐观锁机制,这也很好理解,因为es的定位是一个搜索引擎,所以一般是应用于读多写少的场景中。

1:es的乐观锁机制

有如下3中方式:

1:每次更新文档的version都会+1
    这种方式已废弃
2:内部版本号控制,通过if_seq_no+if_primary_term
3:外部版本号控制,version+verion_type=exeternal,其中verison由外部数据源指定,如数据从MySQL同步

如果是数据在es中维护更新则采用2,内部版本号控制方案,如果是数据来自于外部数据源的同步,则采用3,外部版本号控制。

1.1:内部版本号控制

  • 插入数据
DELETE products

PUT products/_doc/1
{
  "title": "iphone",
  "count": 100
}

注意返回的_seq_no和_primary_term需要记住,在做并发更新控制时需要用到:
在这里插入图片描述

  • 指定if_seq_no和if_primary_term更新一次
PUT products/_doc/1?if_seq_no=0&if_primary_term=1
{
  "title": "iphone",
  "count": 100
}

在这里插入图片描述
假定此时有一个并发修改也指定了?if_seq_no=0&if_primary_term=1则会因为乐观锁检测而失败:
在这里插入图片描述

1.2:外部版本号控制

外部版本号通过version=${外部版本号}&version_type=external完成,如下:

DELETE products

PUT products/_doc/1
{
  "title": "iphone",
  "count": 100
}

假定外部版本号时10000:


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

其中version由外部数据源指定,此时如果有并发修改的话,同样会被乐观锁机制检测到异常:
在这里插入图片描述

写在后面

参考文章列表


http://www.niftyadmin.cn/n/5420901.html

相关文章

IAR全面支持小华全系芯片,强化工控及汽车MCU生态圈

IAR Embedded Workbench for Arm已全面支持小华半导体系列芯片,加速高端工控MCU和车用MCU应用的安全开发 嵌入式开发软件和服务的全球领导者IAR与小华半导体有限公司(以下简称“小华半导体”)联合宣布,IAR Embedded Workbench fo…

Ollama 只安装 Ollama,本地快速部署谷歌开源大模型Gemma(基于Ollama)

参考:本地快速部署谷歌开源大模型Gemma(基于Ollama) - 知乎 确保系统更新: Bash sudo apt update && sudo apt upgrade 需要先下载Ollama,版本要求0.1.26及以上 运行curl -fsSL https://ollama.com/install.sh | sh ollama run gemma:2…

02-app端文章查看,静态化freemarker,分布式文件系统minIO-黑马头条

app端文章查看,静态化freemarker,分布式文件系统minIO 1)文章列表加载 1.1)需求分析 文章布局展示 1.2)表结构分析 ap_article 文章基本信息表 ap_article_config 文章配置表 ap_article_content 文章内容表 三张表关系分析 1.3)导入文章数据库 1.3.1)导入数据…

JavaWeb-Maven基础

Maven是专门用于管理和构建Java项目的工具,是 Apache 下的一个纯 Java 开发的开源项目,基于项目对象模型(POM)概念。先来学习一下Maven基础,等后面学完开发框架后再学Maven高级,这次的内容如下 一、概述 …

算法题 — 两数之和(无序数组)

给定一个整数数组 numbers,从数组中找出两个数满足相加之和等于目标数 target。 假设每个输入只对应唯一的答案,而且不可以重复使用相同的元素。 返回两数的下标值,以数组的形式返回。 暴力算法: public static void main(Str…

基于Node.js 和 FFmpeg构建自动化脚本用来转码视频

这个脚本将监控一个特定的目录,自动转码新添加的视频文件,并将转码后的视频保存到指定目录。 准备环境 安装 Node.js: 访问 Node.js 官网,下载并安装适合你操作系统的 Node.js 版本。 安装 FFmpeg(不清楚的可以看我的上篇博客里有详细的安装…

python爬虫反反爬之图片验证

文章目录 发现宝藏一、ddddOcr(针对图形验证码)1. 工具介绍2. 安装及环境支持3. 识别示例14. 识别示例2 二、Tesseract(标准OCR识别)1. 工具介绍2. 配置系统环境3. 识别示例14. 识别示例23. 识别示例3 发现宝藏 前些天发现了一个…

从云计算到边缘计算:技术演进的下一个风口

从云计算到边缘计算:技术演进的下一个风口 随着数字化转型的加速,计算模式正在经历一场深刻的变革。从早期的集中式计算,到后来的云计算,再到如今兴起的边缘计算,技术的演进正在推动计算模式朝着更高效、更智能的方向…