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 - 并发冲突问题的主要内容,如果未能解决你的问题,请参考以下文章