ES主shard和从shard间数据同步问题

作者 菜鸡互啄 | 发布于2018年10月07日 | 阅读数:264

小白刚学ES,有些不明白的地方想请教各位大神。之前看文章了解到数据在主分片被索引后会进行从分片同步。但是看官方文档说同步操作是异步且并发的。所以感觉如果使用version版本相同进行乐观锁控制的话会存在数据丢失的问题。那么一旦出现数据丢失的问题以后的数据岂不是没办法再同步了?(eg:并发更新操作新数据先到version不匹配丢掉,那么后面的version都将无法匹配)。
已邀请:

rochy - rochy_he@jointsky

赞同来自:

首先主分片完成数据写入或者更新,然后并发将请求转发给复制分片,等待全部复制分片成功后,才认为请求成功。
详细的增删改流程请参阅:https://www.elastic.co/guide/c ... .html
 
对于版本你可以使用外部版本控制:Elasticsearch 中通过增加 version_type=external 到查询字符串的方式重用这些相同的版本号, 版本号必须是大于零的整数, 且小于 9.2E+18 — 一个 Java 中 long 类型的正值。

外部版本号的处理方式和我们之前讨论的内部版本号的处理方式有些不同, Elasticsearch 不是检查当前 _version 和请求中指定的版本号是否相同, 而是检查当前 _version 是否 小于 指定的版本号。 如果请求成功,外部的版本号作为文档的新 _version 进行存储。
更详细的文档请参阅:https://www.elastic.co/guide/c ... ystem

要回复问题请先登录注册