首页 > 其他分享 >21_上机动手实战演练基于_version进行乐观锁并发控制

21_上机动手实战演练基于_version进行乐观锁并发控制

时间:2024-10-01 19:22:51浏览次数:7  
标签:index 21 上机 版本号 field version test type

1、上机动手实战演练基于_version进行乐观锁并发控制

(1)先构造一条数据出来

PUT /test_index/test_type/7
{
"test_field": "test test"
}

(2)模拟两个客户端,都获取到了同一条数据

GET test_index/test_type/7

{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_version": 1,
"found": true,
"_source": {
"test_field": "test test"
}
}

(3)其中一个客户端,先更新了一下这个数据

同时带上数据的版本号,确保说,es中的数据的版本号,跟客户端中的数据的版本号是相同的,才能修改

PUT /test_index/test_type/7?version=1
{
"test_field": "test client 1"
}

{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}

(4)另外一个客户端,尝试基于version=1的数据去进行修改,同样带上version版本号,进行乐观锁的并发控制

PUT /test_index/test_type/7?version=1
{
"test_field": "test client 2"
}

{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[test_type][7]: version conflict, current version [2] is different than the one provided [1]",
"index_uuid": "6m0G7yx7R1KECWWGnfH1sw",
"shard": "3",
"index": "test_index"
}
],
"type": "version_conflict_engine_exception",
"reason": "[test_type][7]: version conflict, current version [2] is different than the one provided [1]",
"index_uuid": "6m0G7yx7R1KECWWGnfH1sw",
"shard": "3",
"index": "test_index"
},
"status": 409
}

(5)在乐观锁成功阻止并发问题之后,尝试正确的完成更新

GET /test_index/test_type/7

{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_version": 2,
"found": true,
"_source": {
"test_field": "test client 1"
}
}

基于最新的数据和版本号,去进行修改,修改后,带上最新的版本号,可能这个步骤会需要反复执行好几次,才能成功,特别是在多线程并发更新同一条数据很频繁的情况下

PUT /test_index/test_type/7?version=2
{
"test_field": "test client 2"
}

{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}

标签:index,21,上机,版本号,field,version,test,type
From: https://www.cnblogs.com/siben/p/18443129

相关文章

  • 22_上机动手实战演练基于external version进行乐观锁并发控制
    课程大纲1、上机动手实战演练基于externalversion进行乐观锁并发控制externalversiones提供了一个feature,就是说,你可以不用它提供的内部_version版本号来进行并发控制,可以基于你自己维护的一个版本号来进行并发控制。举个列子,加入你的数据在mysql里也有一份,然后你的应用系统......
  • CF1214G Feeling Good 题解
    题目链接点击打开链接题目解法我真菜啊,感觉每一步都不难,但一步都没想到/yun考虑两行\(x,y\)什么时候可以构造出合法的矩形?即\(x\)中需要有\(y\)对应位置为\(0\)的\(1\),\(y\)中需要有\(x\)对应位置为\(0\)的\(1\)归纳一下,\(x\)不是\(y\)的子集且\(y\)不......
  • CF2018E2 Complex Segments (Hard Version) 题解
    题目描述\(T\)组数据,给定\(n\)条线段\([l_i,r_i]\),称一个线段集合是复杂的,当且仅当:它可以被划分成若干个大小相等的线段组。两条线段相交当且仅当它们在同一组。求用这\(n\)条线段构成的复杂线段集合的最大值。数据范围\(1\len,\sumn\le3\cdot10^5\)。\(1\l......
  • 华为 HCIP-Datacom H12-821 题库 (30)
    ......
  • 2024初秋集训——提高组 #21
    B.网格游走题目描述你在一个\(r\timesc\)的网格图的\((1,1)\)处。每个格子上都有一个箭头和计时器,一开始,箭头等概率地指向右/下方,计时器上等概率地显示\([0,p]\)中的一个实数。当计时器归零时,箭头指向的方向会翻转,即向右变成向下,向下变成向右,并且计时器会重置为\(p\)。......
  • 上万套源码分享--01-92套-21-SpringBoot【90-98】
     springboot090中小企业设备管理系统设计与实现.rarspringboot092安康旅游网站的设计与实现.zipspringboot094基于web的酒店客房管理系统.zipspringboot095学生宿舍信息的系统.zipspringboot096基于springboot的租房管理系统,rarspringboot097大学生竞赛管理系统.rarspr......
  • HS6621Cx 一款低功耗蓝牙SoC芯片 应用于键盘、鼠标和遥控器消费类产品动能世纪
    HS6621Cx是一款功耗优化的真正片上系统(SOC)解决方案,适用于低功耗蓝牙和专有2.4GHz应用。它集成了高性能、低功耗射频收发器,具有蓝牙基带和丰富的外设IO扩展。HS6621Cx还集成了电源管理功能,可提供高效的电源管理。它面向2.4GHz蓝牙低功耗系统、专有2.4GHz系统、人机接口设备(键盘......
  • 在 win10 2021 LTSC 上安装配置 wsl2 和 ubuntu
    一、起因因为C盘文件太多,加之程序错误,导致C盘中出现许多无效项,注册列表也出现了很多的错误,因此对计算机系统进行了重装操作,并且不是由本地进行的重装,通过微软的服务器进行的重装。在重装之前,Windows的linux子系统,是完全正常使用的。但是在重装后试图重新安装Linux子系统,就发现......
  • P11093 [ROI 2021 Day 2] 树制游戏 题解
    考虑对于一个解,将每对\((e_1,e_2)\)中\(e_1\)的终点权值\(+1\),\(e_2\)的起点权值\(-1\),那么最终每个点的权值一定是\(0\)。考虑先将每条边的终点权值都\(+1\),那么现在要做的就是选一些点将其起点和终点的权值都\(-1\),使得最终每个点的权值为\(0\),于是边的方向就不重要......
  • [1221]基于JAVA的家电销售智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的家电销售智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景与意义:随着我国经济社会的快速发展和科技水平的不断提升,信息化管理已经成为现代企业管理的重要手段。特别是在家电销售行业中,面对激烈的市......