ES使用过程中遇到的问题

1      在并发情况下,同时操作ES时会造成数据不准确的问题。因为es默认采用乐观锁机制,也就是他有一个 _version的概念,假设有两个线程同时修改操作es, 第一个线程拿到值为1,  _version为1, 第二个线程拿到值为1, _version为1, 这时第二个线程比较快,将这个值修改为3, 并 _version为2( _version是es自动更改的,任何操作都会更新这个值, 包括删除操作 ) , 这时线程1在去更新es就会失败,因为他们的 _version版本不一致, 这条数据就会被舍弃掉,其实es有一个默认重试机制( retry_on_conflict ),就是如果 _version值不同的话,会默认获取新的 _version值进行重试,默认是0, 最大只可以设置为5, 也就是说, 如果你设置重试机制为5, 当5次重试后 _version依旧不一致, 那么该线程的数据就会被es丢弃, 造成数据损失
这个问题暂时没有解决掉, 临时采用线程池解决, 设置线程池核心线程为1, 这时可以保证只有一个线程在操作该条es数据......
该实验是基于1000并发同时操作实验的, 如果你的同时并发没有很高,使用_version 重试机制还是可以满足大部分场景,只有一瞬间并发很高的时候,重试5次依旧没有更新到合适的_version版本时, 临时使用单个核心线程解决, 后边有机会在研究

注意,如果有查询条件不生效的情况, 就去看看你索引字段类型是否支持查询,一般字符串使用keyword类型,增加命中率

3   在查询订单信息后,需要通过每个订单信息去查询该订单的商品信息,遇到的问题,如果你的查询条件参数太长(比如同时有10个订单编号去查询,会发生未命中的情况), 也是会请求失败的,es解析不到太长的参数集(使用Get查询)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值