Elasticsearch 乐观锁处理
来源:互联网 发布:miss淘宝店网址 编辑:程序博客网 时间:2024/05/22 17:34
项目中想使用es作为数据存储,又要保证数据在并发更新下的一致性,查了es的资料,简单归纳下。
一 es的版本version
1.es创建或更新时,会维护一条document版本号;示例:
使用prepareIndex增加一条记录,默认version=1,再执行一次prepareIndex,发现version=2,依次累加。
2.使用prepareUpdate局部更新一条,version+1
ES的index:如果没有创建,如果有记录,就覆盖
ES的update:update=query+delete+index三个步骤,原子操作
二 使用es的version保证并发更新一致性
1.创建时如果有记录就报异常,避免被覆盖。使用 IndexRequest.OpType.CREATE,异常:DocumentAlreadyExistsException
2.使用es的version局部更新,当前线程持有version,通过compare and swap 比较更新;当且传入version和es中version一样,才能更新。异常:VersionConflictEngineException
3.使用外部系统版本,setVersionType(VersionType.EXTERNAL),由于es不支持外部系统版本做update,所以用index覆盖
使用setVersionType(VersionType.EXTERNAL),就可以用比es系统中大的version去更新。可以用业务时间戳去设置version
注意:使用index是覆盖,覆盖前保证source正确完整。
阅读全文
0 0
- Elasticsearch 乐观锁处理
- elasticsearch 乐观锁
- Elasticsearch 并发修改乐观锁
- Elasticsearch 并发修改乐观锁
- ElasticSearch并发修改乐观锁
- 乐观锁(处理并发)
- Elasticsearch 基于乐观锁的版本控制
- ElasticSearch并发操作之乐观锁的使用
- ElasticSearch并发操作之乐观锁的使用
- Elasticsearch 基于external的乐观锁的版本控制
- SQL处理并发之乐观锁
- Elasticsearch-对并发冲突的解决(乐观锁、悲观锁)
- 乐观锁
- 乐观锁
- 乐观锁
- 乐观锁
- 乐观锁
- 乐观锁
- 主界面实现_功能菜单
- 丑人就要多读书
- 2017.8.8 B组模拟
- 有关LCS
- 核心组件之service
- Elasticsearch 乐观锁处理
- 黑匣子
- 1.面试题目汇总-嵌入式篇
- python开发部署时新增数据库中表的方法
- 堆排序
- 案例:Shell脚本检测网站url是否正常运行
- 【NYOJ-94】cigarettes
- 明明在包含目录里包含了cv.h的路径,为什么还是报错error C1083: 无法打开包括文件: “opencv/cv.h”: No such file or directory
- 布隆过滤器