ElasticSearch7.3学习(二)—-内部基于_version乐观锁控制机制

导读:本篇文章讲解 ElasticSearch7.3学习(二)—-内部基于_version乐观锁控制机制,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1、悲观锁与乐观锁机制

为控制并发问题,我们通常采用锁机制。分为悲观锁和乐观锁两种机制。

悲观锁:很悲观,所有情况都上锁。此时只有一个线程可以操作数据。具体例子为数据库中的行级锁、表级锁、读锁、写锁等。

特点:优点是方便,直接加锁,对程序透明。缺点是效率低,并发能力非常弱。

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

乐观锁:很乐观,对数据本身不加锁。提交数据时,通过一种机制验证是否存在冲突,如es中通过版本号验证。

特点:优点是并发能力高。缺点是操作繁琐,在提交数据时,高并发的情况下,可能反复重试多次。

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

2、内部基于_version乐观锁控制

es对于文档的增删改都是基于版本号。

第一次执行

PUT /test_index/_doc/4
{
  "test_field": "test"
}

此时可以版本号为1

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

在执行一次:

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

此时版本号已变为2,且result的值也为update

在执行删除文档操作

DELETE /test_index/_doc/4

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

版本号变为3,result的值为deleted

再执行一次新增语句,注意这里要和前一条删除语句间隔时间不要太长,最好立即执行。

PUT /test_index/_doc/3
{
  "test_field": "test"
}

可以看到版本号依然递增,并且验证成功延迟删除策略。

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

因为如果删除一条数据立马删除的话,所有分片和副本都要立马删除,对es集群压力太大。

3、图解es内部并发控制

  ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制

es内部主从同步时,是多线程异步。采用乐观锁机制。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/13421.html

(0)
小半的头像小半

相关推荐

极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!