Elasticsearch7.8.0版本进阶——文档处理

news2024/11/17 3:47:54

目录

    • 一、文档冲突
      • 1.1、文档冲突的概述
      • 1.2、在数据库领域中如何确保并发更新时变更不会丢失
        • 1.2.1、悲观并发控制
        • 1.2.2、乐观并发控制
    • 二、乐观并发控制
      • 2.1、Elasticsearch 的概述
      • 2.2、Elasticsearch 如何确保文档的旧版本不会覆盖新的版本
      • 2.3、Elasticsearch 如何解决相互冲突的变更不会导致数据丢失
    • 三、外部系统版本控制

一、文档冲突

1.1、文档冲突的概述

  • 当使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重新索引整个文档 。如果其他人同时更改这个文档,他们的更改将丢失。

  • 试想我们使用 Elasticsearch 存储我们网上商城商品库存的数量, 每次我们卖一个商品的时候,我们在 Elasticsearch 中将库存数量减少。

  • 突然地,一秒要卖好几个商品。 假设有两个 web程序并行运行,每一个都同时处理所有商品的销售。
    在这里插入图片描述

  • web_1 对 stock_count 所做的更改已经丢失,因为 web_2 不知道它的 stock_count 的拷贝已经过期。结果我们会认为有超过商品的实际数量的库存,因为卖给顾客的库存商品并不存在,我们将让他们非常失望。

  • 变更越频繁,读数据和更新数据的间隙越长,也就越可能丢失变更。

1.2、在数据库领域中如何确保并发更新时变更不会丢失

1.2.1、悲观并发控制

  • 这种方法被关系型数据库广泛使用,它假定有变更冲突可能发生,因此阻塞访问资源以防止冲突。 一个典型的例子是读取一行数据之前先将其锁住,确保只有放置锁的线程能够对这行数据进行修改。

1.2.2、乐观并发控制

  • Elasticsearch 中使用的这种方法假定冲突是不可能发生的,并且不会阻塞正在尝试的操作。 然而,如果源数据在读写当中被修改,更新将会失败。应用程序接下来将决定该如何解决冲突。 例如,可以重试更新、使用新的数据、或者将相关情况报告给用户。

二、乐观并发控制

2.1、Elasticsearch 的概述

  • Elasticsearch 是分布式的:当文档创建、更新或删除时, 新版本的文档必须复制到集群中的其他节点。
  • Elasticsearch 也是异步和并发的:这些复制请求被并行发送,并且到达目的地时也许 顺序是乱的 。

2.2、Elasticsearch 如何确保文档的旧版本不会覆盖新的版本

  • 之前讨论 index , GET 和 delete 请求时,我们指出每个文档都有一个 _version(版本)号,当文档被修改时版本号递增。
  • Elasticsearch 使用这个 version 号来确保变更以正确顺序得到执行。如果旧版本的文档在新版本之后到达,它可以被简单的忽略。

2.3、Elasticsearch 如何解决相互冲突的变更不会导致数据丢失

  • 利用 version 号来确保 应用中相互冲突的变更不会导致数据丢失。

  • 通过指定想要修改文档的 version 号来达到这个目的。 如果该版本不是当前版本号,我们的请求将会失败。

  • 老的版本 es 使用 version,但是新版本不支持了,会报下面的错误,提示我们用 if_seq_noif_primary_term

    {
    "error": {
    	"root_cause": [
    		{
    			"type": "action_request_validation_exception",
    			"reason": "Validation Failed: 1: internal versioning can not be used
    			for optimistic concurrency control. Please use `if_seq_no` and `if_primary_term`
    			instead;"
    		}
    	],
    	"type": "action_request_validation_exception",
    	"reason": "Validation Failed: 1: internal versioning can not be used for optimistic concurrency 
    	           control. Please use `if_seq_no` and `if_primary_term` instead;"
    	},
    	"status": 400
    }
    

三、外部系统版本控制

  • 一个常见的设置是使用其它数据库作为主要的数据存储,使用 Elasticsearch 做数据检索, 这意味着主数据库的所有更改发生时都需要被复制到 Elasticsearch ,如果多个进程负责这一数据同步,你可能遇到类似于之前描述的并发问题。

  • 如果你的主数据库已经有了版本号 或者一个能作为版本号的字段值比如 timestamp —那么你就可以在 Elasticsearch 中通过增加 version_type=external 到查询字符串的方式重用这些相同的版本号, 版本号必须是大于零的整数, 且小于 9.2E+18(一个 Java 中 long类型的正值)。

  • 外部版本号的处理方式和我们之前讨论的内部版本号的处理方式有些不同,Elasticsearch 不是检查当前 _version 和请求中指定的版本号是否相同, 而是检查当前_version 是否 小于 指定的版本号。 如果请求成功,外部的版本号作为文档的新 _version进行存储。

  • 通过 Postman 发送 POST请求创建文档,在消息体里,指定创建的文档数据,创建后版本号为1

    # POST http://localhost:9200/my_index/_doc/03
    {
        "name":"zhangsan",
        "age":25,
        "sex":"男"
    }
    

    在这里插入图片描述

  • 其次,通过 Postman 发送 POST请求修改文档,在消息体里,指定修改的文档数据,修改后版本号为2

    # POST http://localhost:9200/my_index/_doc/03
    {
        "name":"zhangsan",
        "age":20,
        "sex":"男"
    }
    

    在这里插入图片描述

  • 最后,通过 Postman 发送 GET请求查看文档,在消息体里,指定查看的文档数据的版本号为1小于当前版本号2

    # GET http://localhost:9200/my_index/_doc/03?version=1&version_type=external
    

    在这里插入图片描述

  • 由上图输出结果可知:当前_version 是否 大于 指定的版本号。 请求失败。

    注:外部版本号不仅在索引和删除请求是可以指定,而且在 创建 新文档时也可以指定。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷P5738 【深基7.例4】歌唱比赛 C语言/C++

【深基7.例4】歌唱比赛 题目描述 n(n≤100)n(n\le 100)n(n≤100) 名同学参加歌唱比赛,并接受 m(m≤20)m(m\le 20)m(m≤20) 名评委的评分,评分范围是 000 到 101010 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分&…

拍摄的风景视频中,如何快速有效地去除视频中的杂物?

我们在外游玩拍摄的短视频,视频中出现的不必要杂物,比如垃圾、广告或其他不相关的人,会影响视频内容的传达,会降低视频的观感质量。因此,需要去除这些杂物,使得视频更加干净、整洁。让观众更容易理解视频的…

性能分析工具的使用

在数据库调优中,我们的目标就是响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。 1.数据库服务器优化步骤 数据库调优流程图 整个流程划分成了**观察(Show status)和行动(Ac…

行测-判断推理-图形推理-样式规律-属性规律-曲直性

左边的图全是由曲线构成的选C1 3 5全是由曲线构成的2 4 6全是由直线构成的第三行的图形有曲有直选A1 3 5有曲有直2 4 6全是直线选D图形有曲有直,排除B D外曲内直->内曲外直->外曲内直->内曲外直->外曲内直->内曲外直所以问号出的图形应该是内曲外直选…

【面试题】当面试官问 Vue2与Vue3的区别,你该怎么回答?

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库被问到 《vue2 与 vue3 的区别》应该怎么回答Vue 内部根据功能可以被分为三个大的模块:响应性 reactivite、运行时 runtime、编辑器…

Win11 文件夹打开慢或卡顿解决方案

问题 目前是 2023/2/27, 我的 Win11 系统点开一个文件夹要等待 2-3 秒才能加载出来, 使用体验极差。网上查阅大量资料, 有些人在系统更新后这个情况就消失了, 但是我这一直存在, 系统也是当前的最新版, 没有修复。 目前得出的结论是, 因为 Win11 的工具栏占用了过多的资源, 需…

Web3中文|Litra:简洁而优美的NFT流动性协议,能给NFT市场带来什么?

2021年,NFT元年2021年,无疑是 NFT 的“元年”。这一年推特创始人的首条推特被拍出250万美元,加密艺术家Beeple的数字作品“First 5000 Days”在佳士得以6900万美元价格成交,无聊猿最高上涨了1800倍。2021年11月,在Goog…

【Python学习笔记】第十九节 Python 面向对象(一)

在现实世界中,随处可见的一种事物就是对象,对象是事物存在的实体,如学生、汽车等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。通常都会将对象划分为两个部分,即静态部分与…

一文让你上手shell

简介shell是C 语言编写的程序,是向操作访问Linux内核的桥梁。shell也是测试人员需要简单必备的一项小技能,至少能看懂并简单编写脚本,可以让与Linux相关的操作提升1个level。扩展名:.sh运行操作系统:Linux运行环境&…

cesium从入门到进阶(一):坐标系与坐标系转换

目录 一、坐标系 1、屏幕坐标系(像素) 1.1 二维笛卡尔平面坐标Cartesian2 1.2 三维笛卡尔空间坐标(世界坐标)Cartesian3 2、地理坐标系 2.1 地理坐标系(弧度)Cartographic 2.2 地理坐标系(经纬度)WGS84 二、坐标系转换 1…

华为不丢失数据解手机屏幕锁华为售后能保资料解锁吗华为锁屏保留数据荣耀手机解锁保数据华为手机保存数据解锁

大家好,今天给大家分享的华为mate9手机忘记密码保资料不清除数据解锁华为手机案例分享:这个用户是从马来西亚邮递回国的华为p30手机进行保资料不清除数据解除华为锁屏密码,由于机主突然的去世,手机里有公司贵重的资料,…

27 openEuler管理网络-通过ifcfg文件配置网络

文章目录27 openEuler管理网络-通过ifcfg文件配置网络27.1 配置静态网络27.2 配置动态网络27.3 配置默认网关27 openEuler管理网络-通过ifcfg文件配置网络 说明: 通过ifcfg文件配置的网络配置不会立即生效,需要在root权限下执行systemctl reload Network…

因为需求理解不到位,视频自动播放列表又重写了

一、一定要理解需求再下手 刚接手一个旧项目,只需要在上面添加一些新功能,和后端对对接口就可以了。因为害怕总是去问别人需求惹人烦,所以好几次讨论给我讲需求我就说我懂了,然后下来自己思考怎么做。最后又因为好多需求理解不到…

【机器学习】机器学习实验一:线性回归(详细代码展示)

文章目录一、前言二、梯度下降理解算法2.1 单变量线性回归2.2 多变量线性回归2.3 正则化2.3.1 L2正则化(Ridge回归)2.3.2 L1正则化(Lasso回归)三、实验一详细代码案例一、前言 本次实验我将分为两个部分进行讲解,第一…

Echarts 模拟汽车速度和油量的仪表显示,两个仪表盘同图

第025个点击查看专栏目录本示例的目标是模拟汽车速度和油量的仪表显示,这里两个仪表盘同图,并倾斜一定的角度。 文章目录示例效果示例源代码(共115行)相关资料参考专栏介绍示例效果 示例源代码(共115行) /*…

ABAP中Literals的用法(untyped literal vs. typed literal)

1. 什么是Literals ? Literals的字面意思即“文字”。其实,Literals就是在ABAP代码中直接指定的一个字符串,但注意哦,这个字符串并不意味着其类型一定是string哦。 要弄清这个概念,就要清楚ABAP对于Literals 的定义和处理方式。…

Win10+vs2019配置与运行RenderMatch+用contextcapture进行重建

Win10vs2019配置与运行RenderMatch用contextcapture进行重建 继上一篇博客,ground image 和aerial image影像匹配结果将会被保存为match.bin二进制文件里 再次运行时,只需要把这个bin文件load进来就可以了,不需要再次进行匹配,修…

推荐五款在手机上写代码的APP(附下载地址)

🌟1.C4droid一款Android设备上的C/C程序IDE🌟2.AIDE一个直接在 Android 设备上开发 Android 应用的集成开发环境基于原版深度定制、适配本土化的操作习惯,一键快速添加常用的代码,大幅提高开发效率。实时的语言翻译,帮…

CUDA的卸载

大家好,下面将进行CUDA的卸载,卸载情况描述如下: > 安装在电脑Windows10系统 (1)安装在电脑Windows10系统,打开控制面板-程序-程序和功能,可以看到自己已经安装过的CUDA,如下所示: (2)依次选中需要卸载的CUDA包,鼠标右键点击卸载即可,一般需要保留3个已经安装…

idea集成Alibaba Cloud Toolkit插件

idea集成Alibaba Cloud Toolkit插件 ​ 使用该插件主要是简化打包、上传、启动服务的相关操作。 ​ 很早之前的方式是使用开发工具(eclipse,idea),使用maven命令完成项目打包(这里指jar),然后通过shell工…