elasticsearch中版本号(version)的问题

    今天在分析ES的索引的创建过程中看到了些和version相关的变量(例如:versionForIndexing)。这些个变量是干什么的呢?

    答:用于冲突处理的。

    在ES的应用场景中,使用index API更新文档,可以一次性读取原始文档,做修改,然后重新索引整个文档,最近的索引请求将获胜:无论最后哪一个文档被索引,都将唯一存储在ElasticSearch中,如果其他人同时更改了这个文档,他们的更改将丢失。

    很多时候丢失信息是没问题的。也许我们的主数据存储是一个关系型数据库,我们只是将数据复制到ElasticSearch中并使其可被搜索;也许两个人同时更改文档的几率很小 。或者对于某些业务来说偶尔丢失更改并不是很严重的问题。

    但,有时候丢失一个变更就是非常严重的。试想我们使用ElasticSearch存储我们网上商城商品库存的数量,每次我们卖一个商品的时候,在ElasticSearch中将库存数量减少(促销时一个时间点卖很多商品)。或是金融系统两个人同时对一个账户进行取钱操作。都存在如下图中存在的问题:


在数据库领域中,有两种方法通常备用来确保并发更新时变更不会丢失:

    1、悲观并发控制

        这种方法被关系型数据库广泛使用,它假定有变更冲突可能发生,因此阻塞访问资源以防止冲突。一个典型的例子是读取一行数据之前先将其锁住,确保只有放置锁的线程能够对这行数据进行修改。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值