ElasticSearch最佳入门实践(十九)Elasticsearch内部如何基于_version进行乐观锁并发控制

1、_version元数据

第一次创建一个document的时候,它的_version内部版本号就是1;
以后,每次对这个document执行修改或者删除操作,都会对这个_version版本号自动加1;
哪怕是删除,也会对这条数据的版本号加1

在删除一个document之后,它不是立即物理删除掉的,因为它的一些版本号等信息还是保留着的。先删除一条document,再重新创建这条document,其实会在delete version基础之上,再把version号加1

在这里插入图片描述

2、es内部的多线程异步并发修改时,是基于自己的_version版本号进行乐观锁控制的

在es后台,很多的这种类似的replica同步请求,都是多线程异步的,也就是说多个修改请求之间,是乱序的,没有顺序,可能先改的后到,后修改的先到。

假设es内部没有进行乐观锁并发控制,后修改的先到了,然后先修改的后到,那么先修改的数据就会把后修改的数据给覆盖的。这个时候数据就错了。

如果真的发生了后修改的数据先到,先修改的数据后到,es内部的机制是会先把后修改先到的数据保存,并且把版本号+1。
先修改后到的数据会对比一下版本号,如果不相等的话直接将这条数据扔掉,这样的话数据的结果就会保持一个正确的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值