美文网首页
Elasticsearch(ES)乐观锁~多版本并发控制

Elasticsearch(ES)乐观锁~多版本并发控制

作者: SnailFast | 来源:发表于2019-06-06 13:32 被阅读0次

        ES内部基于_version进行乐观锁并发控制。在ES中,有两种version,一种是内部version,由ES来维护;另一种是外部version,需要用户自己来维护。用户可以根据实际业务场景选择不同类型的版本控制。

内部版本

        默认情况下,文档版本是由ES自己维护的。当创建文档索引时,ES会给文档的版本赋值为1,如下图中_version属性。

索引文档时默认_version值为1

        每当更新一次文档,version会自动加1。如下图所示:

更新一次version变成2 更新两次version变成3

        当使用内部version时,ES要求请求中的version值必须和ES中文档的的version值相同,否则会操作失败。如下图所示:

指定的version值比ES中文档的version小 指定的version值比ES中文档的version大

        对于UPDATE操作,ES会先通过文档ID去GET文档,拿到文档的version之后,再对文档做Reindex。如果在GET和Reindex期间,文档被更新,version值发生变化,则更新失败。可以使用retry_on_conflict参数来设置当发生更新上述情况更新失败时,自动重试的次数。retry_on_conflict的默认值为0,即不重试。

外部版本

        当创建索引数据时,ES允许用户自己维护version,如下图所示:

使用外部version

        当使用外部version时,ES要求请求中的version值必须大于ES中文档的的version值,否则操作失败。如下图所示:

指定的version值和ES中文档的version值相等 指定的version值比ES中文档的version小 指定的version值比ES中文档的version大

相关文章

网友评论

      本文标题:Elasticsearch(ES)乐观锁~多版本并发控制

      本文链接:https://www.haomeiwen.com/subject/hwmyxctx.html