ElasticSearch的并发控制问题

本文详细介绍了存储系统并发控制的基本思路,包括悲观锁和乐观锁。重点阐述了Elasticsearch采用的乐观锁策略,通过内部版本控制(_seq_no + _primary_term)和外部版本控制(version)确保数据一致性。通过示例展示了如何在更新操作中利用这些机制防止并发冲突,当版本不符时,更新操作会失败并返回错误信息。

1.存储系统并发控制的基本解决思路

  1. 采用悲观锁

    这种方式,是说我确定一定会有较大或者非常大的可能产生并发,那么我就对数据资源加锁,防止并发操作时产生的数据冲突,从而对一类数据进行顺序执行。

  2. 采用乐观锁

    这是方式,是我假定并发不会发生或者很少发生,不会阻塞正在尝试的操作,如果数据在读写过程中被修改,更新就会失败,然后由应用程序来处理决定是否要进行冲突的解决以及解决的方式,例如重试、或者就默认更是失败。

2.ElasticSearch采用的并发控制

  1. ElasticSearch采用的是第二种,乐观锁并发控制

  2. ElasticSearch的乐观锁并发控制

    1. ElasticSearch的文档更新方式:我们知道,ElasticSearch的每个文档都是不可变的,如果要更新文档,其实是把源文档删除,同时增加一个全新的文档,并且把文档的version字段+1;
    2. 内部版本控制:采用_seq_no+_primary_term的方式进行并发控制;
    3. 使用外部版本控制:采用version+external的方式进行并发控制,注意这里是说不用es自己维护version,而是由外部程序来自己维护verison(这个version只能变大,不能变小哦);
  3. 正常的数据更新过程:应该是先查询出文档,然后再执行更新操作;

  4. ElasticSearch乐观锁并发控制的实例

    1. 先创建一个文档
    PUT accout/_doc/1
    {
      "user_id": 2,
      "account_amout": 30
    }
    

    结果:

    {
      "_index" : "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值