ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制
1、悲观锁与乐观锁机制
为控制并发问题,我们通常采用锁机制。分为悲观锁和乐观锁两种机制。
悲观锁:很悲观,所有情况都上锁。此时只有一个线程可以操作数据。具体例子为数据库中的行级锁、表级锁、读锁、写锁等。
特点:优点是方便,直接加锁,对程序透明。缺点是效率低,并发能力非常弱。
乐观锁:很乐观,对数据本身不加锁。提交数据时,通过一种机制验证是否存在冲突,如es中通过版本号验证。
特点:优点是并发能力高。缺点是操作繁琐,在提交数据时,高并发的情况下,可能反复重试多次。
2、内部基于_version乐观锁控制
es对于文档的增删改都是基于版本号。
第一次执行
1 2 3 4 | PUT /test_index/_doc/ 4 { "test_field" : "test" } |
此时可以版本号为1
在执行一次:
此时版本号已变为2,且result的值也为update
在执行删除文档操作
1 | DELETE /test_index/_doc/ 4 |
版本号变为3,result的值为deleted
再执行一次新增语句,注意这里要和前一条删除语句间隔时间不要太长,最好立即执行。
1 2 3 4 | PUT /test_index/_doc/ 3 { "test_field" : "test" } |
可以看到版本号依然递增,并且验证成功延迟删除策略。
因为如果删除一条数据立马删除的话,所有分片和副本都要立马删除,对es集群压力太大。
3、图解es内部并发控制
es内部主从同步时,是多线程异步。采用乐观锁机制。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
本文来自博客园,作者:|旧市拾荒|,转载请注明原文链接:https://www.cnblogs.com/xiaoyh/p/15978102.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗