• 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内部主从同步时,是多线程异步。采用乐观锁机制。



    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    rk3568 SDK的buildroot添加package
    UE打包报错,出现这个是为啥啊打包错误找不到这个文件
    单调队列优化DP
    npm 清缓存
    DAY 12 结构体 共用体 枚举02
    [附源码]java毕业设计毕业设计管理系统
    非零基础自学Java (老师:韩顺平) 第15章 泛型 15.6 自定义泛型
    html5 头部标签
    (四)stm32之通信协议
    Chapter5.5:频率响应法
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/15978102.html