ES处理冲突

1、什么是文档

对象JSON序列化后是一个文档

2、如何唯一确定一个文档

_index + _type + _id

id可以由外部指定,也可以由ES自动生成

3、ES更新文档流程

先GET原始文档,然后修改,最后将整个文档进行再次索引处理

4、ES中_version变更

对应于增删查改操作,ES中索引、put和删除操作时,无论文档有没有变化,它的_version都会增加

5、如何处理修改冲突

乐观并发控制:所有更新或删除文档的API都支持version参数,从而实现乐观并发控制


使用场景1:ES作为持久化层
问题描述:不同进程同时对某一个文档进行修改
解决方案:先Get操作获取了_version,在修改时传入之前获取得version参数,只有当前文档version与指定version参数相等时才执行更新,否则提示失败


使用场景2:MySQL作为持久化层,ES只是用于搜索
问题描述:当主库(MySQL)中数据发生更改,需要更新ES,可能存在并发修改?
解决方案:ES比较外部version是否大于文档_version,才能更新成功,例如PUT  /website/blog/123?version=5&version_type=external


使用场景3:无关顺序的更新(局部更新:新增字段或改变字段值)
问题描述:对于很多的局部更新来说,文档有没有发生变化实际上不重要
解决方案:设定retry_on_conflict,规定自动完成这项请求的次数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值