ES - 并发冲突问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES - 并发冲突问题相关的知识,希望对你有一定的参考价值。

参考技术A

ES基于自身乐观锁进行并发控制
ES基于Document中的version字段进行并发控制,初始创建version为1
每次需要带上version进行更新,该步骤需要多次,特别是在多线程环境下

基于external version进行并发控制
ES提供了一个插件,可以不用它提供的version,可以基于自己维护的一个版本号进行控制, 详细语法

这里需要关注两点
1.ES提供的version需要与ES中的version一摸一样的时候才可以进行修改
2.external version提供的version比ES中的version大的时候才可以进行修改

partial update 部分修改
释义:每次传递需要发生修改的Field,不需要将全量的document传递过去
语法如下

Partial Update内部原理和传统PUT方式内部原理是一样的,会将老的Document标记为deleted,然后创建一个新的Document。

Partial Update相较于全量替换的优点如下
1.所有的查询,修改和写入操作,都发生在ES中的一个shard 内部,避免了网络数据传输开销(减少两次网络请求),大大的提升了性能
2.减少了查询和修改的时间间隔,可以减少并发冲突的情况

Partial Update的并发控制
Retry策略,语法如下

上面语法的意思是重新拿到版本号进行更新,最多重试五次

Elasticsearch并发冲突问题

参考技术A

当向es插入一条数据时:

第一次创建document时,它的_version就是1,每次对document进行修改或删除,都会对这个_version进行版本号的加1,哪怕是删除,也会对这条数据的版本号加1
操作示例:修改数据两次,然后再删除

每次更新数据时都带上_version参数,_version参数的值必须和更新前查询出来的_version值一致时,才能更新成功(即:先查询当前数据的_version的值,假设为now_1,然后更新时,带上参数_version=now_1去更新);如果_version的版本号不一致的话,此次的更新失败

如果external version更此条数据,_version的值应该大于2

以上是关于ES - 并发冲突问题的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch Elasticsearch并发冲突问题

Elasticsearch并发冲突问题

Elasticsearch系统学习-ES并发控制

使用 axios 拦截器解决「 前端并发冲突 」 问题

Mono C# SQL 更新“并发冲突”

微服务注册中心的注册表如何更好的防止读写并发冲突