当前位置: 首页 > news >正文

elasticsearch学习笔记(十二)——Elasticsearch并发冲突问题以及锁机制

1、Elasticsearch并发冲突问题

对于一般的ES操作流程是:
1、先get document数据,比如获取到商品数据,将数据显示到网页上,同时在内存中缓存该documentd的数据
2、当网页发生了购买后,直接基于内存中的数据,进行计算和操作
3、将计算后的结果写回ES中

下面描述一下场景
比如在电商场景下,假设说,我们有一个程序,工作流程如下:
1、读取商品的信息
2、用户下单购买
3、更新商品信息(主要是将库存减1)
我们假设程序是多线程的,所以说可能有多个线程并发的去执行上述的3个步骤流程

将上述场景具体到某个商品的库存修改的时候,假设一个牙膏的库存是100件,现在同时有两个人都过来读取了牙膏的数据,然后下单购买了这管牙膏,此时两个线程并发执行,同时在进行商品库存的修改。

如图所示,在正常的情况下,我们期望线程A将库存-1,设置为99件;然后线程B接着这个99件,将库存-1,变为98件,然后写入到ES中。
但是总有一个线程是先到的,假设就是线程A,此时线程A就会先将牙膏的库存设置为99件,然后线程B再次将牙膏的库存设置为99件,结果很显然就不是我们想要的。

上述的这个流程,其实就是ES中的并发冲突问题,会导致数据不准确。

2、悲观锁与乐观锁两种并发控制方案

这里先附上中华石衫老师画的手工图

下面简单做一下描述和概括
悲观锁:所谓悲观锁就是在任何情况下都上锁,上锁之后,就只有一个线程可以操作这一条数据,其它线程只能等待,当然在不同的场景下,上的锁会有所不同,可以是行级锁,表级锁,读锁,写锁。通俗的来讲,加了悲观锁的话,对数据操作的时候就相当于是单线程的了。
乐观锁:其实所谓的乐观锁,根本就没有加锁,只是多了一标识字段,这个字段可以是一个整数类型的,也可以是时间类型的。主要的作用就是在每次修改数据的时候会做一层判断,判断数据是否已经被修改过了,如果已经被修改了,那么就会重新获取数据,在修改,这个过程不断进行知道数据修改成功。

下面比较一下两种锁的优缺点
1、对于悲观锁,它使用起来很方便,直接加锁就可以了,对于应用程序来说,它是透明的,不需要做额外的操作。但是每次都需要获取到锁之后才能对数据进行修改,也就是同一时间只能有一个线程能够进行操作,并发能力很低
2、对于乐观锁,它根本就没有加锁,所以并发能力很高。但是每次更新数据的时候都需要对标识字段做一个判断,这个过程可能要重复很多遍。而且是需要应用程序做处理的。

3、Elasticseach基于_version进行乐观锁的并发控制

对于ES来说,它是采用乐观锁,对应的乐观锁的标识字段是_version,是一个整数类型,一开始创建document时,_version是等于1的,之后对document每修改一次,_version版本号就会自动加1。

http://www.jsqmd.com/news/1129060/

相关文章:

  • 【信息科学与工程学】【数据科学】第四十八篇 大数据与数据科学和应用数学01
  • 手把手带你打 Kaggle!F1 进站预测实战
  • MoveIt2运动规划器深度性能对比:OMPL vs CHOMP vs STOMP架构解析与优化策略
  • C# 的灰度处理 vs JavaScript 的 Canvas:跨越“体验的深渊”
  • Codex 桌面客户端下载与安装,Windows 和 Mac 新手一步到位
  • java面试题:netty 和spring cloud 阿里巴巴
  • 大麦网自动化抢票脚本:Python技术实现与实战应用指南
  • 3步掌握MAVProxy:Python无人机地面站完全掌控指南
  • 【Atlas】为什么 Atlas 依赖 HBase?HBase 在 Atlas 中扮演什么角色?
  • 掌握开源VIA键盘配置器:5个实战技巧提升机械键盘使用体验
  • 深度解析devin.cursorrules:将Cursor编辑器升级为智能AI编程助手
  • 企业级FastAPI后端模板搭建(四)数据库迁移
  • 3个简单步骤掌握VIA键盘配置:打造你的个性化机械键盘
  • 如何在Unreal Engine 5中实现专业级体积特效:OpenVDB与NanoVDB插件终极指南
  • PDF2Audio:将学术文档转化为有声内容的智能解决方案
  • CSS颜色
  • WGAN-GP 在 CPU 上训练插画的启示:从理论到受限资源下的生成实践
  • Codex插件使用指南:从下载到上手全流程 Codex插件、Codex客户端下载、Codex使用教程、AI插件使用、Codex Skill、MCP是什么、Codex插件安装
  • 【Atlas】Solr 在 Atlas 中的作用是什么?是否可以替换为 Elasticsearch?
  • IPATool终极实战:解锁iOS应用包下载与逆向分析的完整指南
  • 深度学习材料研发革命:如何用Python算法库构建智能设计系统?
  • 【技术管理者实战】两面三刀的下属,如何不动声色地请离?
  • 猫抓浏览器扩展:10个高效资源嗅探技巧完全指南
  • 小白也能懂的 RAG 原理 —— 从检索到生成的完整指南
  • 适合零基础搭建Agent的低代码工具平台
  • 5分钟构建AI浏览器自动化助手:Stagehand终极指南
  • 3分钟搞定Spotify音乐下载:spotDL完整指南与网页界面使用教程
  • 当前流行的OCR工具对比与技术选型
  • Cargo workspace 版本发布:多包项目别手动改到手酸
  • 第30章 类型系统高级话题