ES系列--文档处理

news2024/11/25 16:54:35

一、文档冲突

        当我们使用 index API 更新文档 ,可以一次性读取原始文档,做我们的修改,然后重 新索引 整个文档 。 最近的索引请求将获胜:无论最后哪一个文档被索引,都将被唯一存 储在 Elasticsearch 中。如果其他人同时更改这个文档,他们的更改将丢失。

        很多时候这是没有问题的。或者对于我们的业务来说偶尔丢失更改并不是很严重的问题。但有时丢失了一个变更就是 非常严重的 。比如:库存的扣减(虽然目前很多库存的扣减都是使用redis实现),如果丢失将会发生超卖的现象。

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

在数据库领域中,有两种方法通常被用来确保并发更新时变更不会丢失:

一、悲观并发控制 

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

二、乐观并发控制

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

二、乐观并发控制 

        Elasticsearch 是分布式的。当文档创建、更新或删除时, 新版本的文档必须复制到集 群中的其他节点。Elasticsearch 也是异步和并发的,这意味着这些复制请求被并行发送,并 且到达目的地时也许 顺序是乱的 。如果更改数据,就会产生旧版本覆盖新版本的可能。

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

        我们可以利用 version 号来确保 应用中相互冲突的变更不会导致数据丢失。我们通过 指定想要修改文档的 version 号来达到这个目的。 如果该版本不是当前版本号,我们的请 求将会失败。

        老的版本 es 使用 version,但是新版本不支持了,会报下面的错误,提示我们用 if_seq_no 和 if_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
}

如果想使用version,可以中通过增加 version_type=external来进行使用。

 

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

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

相关文章

Java-生成数据库设计文档

目录 场景screw 官网介绍接口编写 场景 在企业开发中,有些公司会要求开发人员编写数据库表结构文档,这项工作没啥技术含量而且很繁琐,每当有表发生更改时就需要维护这个文档,或者是需要交付数据库设计文档和导出数据库设计文档这类…

8月|龙讯旷腾高性能计算与工业材料模拟论坛2023

2023年8月25日 山东青岛 高性能计算与工业材料模拟论坛2023 青岛,别称岛城,国务院批复确定的中国沿海重要中心城市和滨海度假旅游城市,国家历史文化名城、中国帆船之都、世界啤酒之城、联合国电影之都,也是国家海洋科研和教育中…

【产品经理】TO B市场分析

市场分析是一个独立而又宏大的学科领域,并且具体使用中,目标和个体不同,分析的方式方法也不同。TO B产品的市场分析是对市场环境、市场规模、性质、特征、竞品进行分析,从而寻找和研究潜在需求的市场机会,帮助产品经理…

设计模式大白话——工厂模式

文章目录 设计模式大白话——工厂模式1.1、简单工厂:1.2、工厂方法1.3、抽象工厂 设计模式大白话——工厂模式 1.1、简单工厂: 场景与思路 ​ 现在需要开一个 Pizza 店,Pizza 店可以生产各种口味的 Pizza ​ 既然要生产各种各样的 Pizza,那就会很容易想…

管理类联考——英语——趣味篇——不择手段——d开头单词

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 💕兴趣爱好:b站天天刷&…

SignalTap II 软件使用步骤

文章目录 前言一、SignalTap II是什么?二、使用步骤三、总结四、参考资料 前言 环境: 1、Quartus18.1 2、板子型号:原子哥开拓者2(EP4CE10F17C8) 要求: 能够使用SignalTap II进行片上调试。 一、SignalTap II是什么? S…

海外媒体发稿:链游媒体发稿写作方法及优缺点解析

链游媒体发稿是一种新的媒体发布机制,它可以把信息准确、及时、有效地传播给大量的人,帮助企业实现信息的最大化传播,因此越来越多的公司也开始使用链游媒体发稿服务,本文就介绍链游媒体发稿写作的方法及小技巧。 一、链游媒体发稿…

Kubernetes Service的过程

文章目录 Kubernetes Service的实现基础内容1. 命令 ip route show table all2. DNAT3. IPVS和iptables4. Service Service的实现简述 Kubernetes Service的实现 基础内容 在了解Service之前,需要先了解一些额外的知识: 命令: ip route show table allDNATIPVS和iptables基础…

MNE脑电数据预处理

MNE 官网链接 导包 import mne import matplotlib.pyplot as plt加载数据集 不同格式数据集使用的函数不同,具体在官网搜索 raw mne.io.read_raw_brainvision(r"test.vhdr", preloadTrue)此语句为了画图方便 %matplotlib降采样 raw.resample(200)…

Vue3统计数值(Statistic)

可自定义设置以下属性: 数值的标题(title),类型:string | slot,默认:‘’数值的内容(value),类型:string | number,默认:…

MySql索引分类及创建索引的相关语法

1.索引分类 1.1 InnoDB中索引的分类 聚集索引与二级索引之间的B树的结构 sql语句索引执行的过程讲解 根据id查询的聚集索引效率要比二级索引高,故第一条sql的执行效率要高于第二条sql的执行效率。 2.索引语法 如果一个索引只关联一个字段,这种索引…

[虚幻引擎插件说明] DTOperateFile 使用蓝图操作文件

本插件可以在虚幻里面使用蓝图文件进行读、写、移动、复制、删除等操作。 目录 1. 节点说明 Get Stat Data – 获取文件信息 Directory Exists – 判断目录是否存在 Directory Create – 创建目录 Directory Delete – 删除目录 File Exists – 判断文件是否存在 File …

Kubernetes Dashboard部署安装

目录 Dashboard 官方文档:部署和访问 Kubernetes 仪表板(Dashboard) | Kubernetes 参考文档:(120条消息) K8S 安装 Dashboard_k8s 安装dashboard_tom.ma的博客-CSDN博客 扩展: K8S 安装 Dashboard 1、在 master …

BUFG/BUFGCE/BUFH/BUFHCE/BUFH/BUFGHCE/BUFMR/BUFMRCE/BUFR/IBUF/IBUFDS

本文对BUFG/BUFGCE/BUFH/BUFHCE简单介绍,便于后续查看。 原语的使用:在vivado中找到所要用的原语,直接将其实例化到设计中即可。 文章目录 BUFGBUFGCEBUFHBUFHCEBUFMRBUFRBUFMRCEIBUFIBUFDS 下图为 7 系列 FPGA 时钟架构图: BU…

TypeScript基础篇 - React Webpack TS 环境实战

目录 WebpackReactTS tsconfig.json src/App.tsx src/main.tsx scripts/webpack.config.js package.json scripts/template.html 一张ai生成图~ WebpackReactTS npm install react react-dom 【安装react并且安装一个react-dom】 引用时文件出现...;需要增加定义文件&a…

数据分析案例-数据分析师岗位招聘信息可视化

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

解决appium-doctor报ffmpeg cannot be found

一、下载ffmpeg安装包 https://ffmpeg.org/download.html 找到如图所示红框位置点击下载ffmpeg安装包。 二、配置ffmpeg环境变量 三、检查ffmpeg版本信息 重新管理员打开dos系统cmd命令提示符,输入ffmpeg查看是否出现版本信息,安装完好。 ffmpeg

在php中安装php_xlswriter扩展报错,找不到php_xlswriter.dll

前言:这里已经把下载的php_xlswriter.dll扩展放到了php安装目录的ext目录下,运行php -m还是报错找不到该扩展 原因:下载的扩展是nts的,而安装的php是ts的。查看当前php是nts还是ts: 在PHP中,可以利用phpin…

DWG文件怎么转图片?简单好用的转换方法分享

将CAD文件转换成图片的优势在于,图片文件更易于共享和传输。CAD文件通常比较大,而图片文件则更加轻便,容易通过电子邮件或者其他方式进行传输。此外,图片文件更易于浏览和查看。CAD文件需要特殊的软件才能打开和查看,而…

全志F1C200S嵌入式驱动开发(GPIO输出)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s本身的外部引脚比较少。所以这个时候,不可避免地,很多引脚的功能就会重叠在一起。这种情况下,我们就要学会取舍了。比如说,如果是学习sd卡的时候,那么spi的…