美文网首页ElasticSearch
Elasticsearch第8节 版本控制

Elasticsearch第8节 版本控制

作者: 小超_8b2f | 来源:发表于2019-06-14 20:52 被阅读0次

      ElasticSearch采用了乐观锁来保证数据的一致性,也就是说,当用户対document进行操作时,并不需要对该document作加锁和解锁的操作,只需要指定要操作的版本即可。当版本号一致时,ES会允许该操作顺利执行,而当版本号存在冲突时,ElasticSearch会提示冲突并抛出VersionConflictEngineException异常。

    ElasticSearch的版本号的取值范围为1到2^63 - 1.

    1. 内部版本控制
      使用的是_version
    #version = 当前的版本号
    PUT lib1/_doc/2?version=5
    {
        "sex":"male",
        "name":"xiaochao",
        "age":10
    }
    
    #结果报错,待考究
    {
      "error": {
        "root_cause": [
          {
            "type": "action_request_validation_exception",
            "reason": "Validation Failed: 1: internal versioning can not be used for optimistic concurrency control. Please use `if_seq_no` and `if_primary_term` instead;"
          }
        ],
        "type": "action_request_validation_exception",
        "reason": "Validation Failed: 1: internal versioning can not be used for optimistic concurrency control. Please use `if_seq_no` and `if_primary_term` instead;"
      },
      "status": 400
    }
    
    1. 外部版本控制

    项目中ES通常是用来搜索的,但通常还会用到Oracle,MySQL等关系型DB,将关系型DB的数据导入到ES中,此时我们希望ES的version机制和关系型DB的version机制保持一致,eg: oracle通常用时间戳,那么我们也希望ES用时间戳。

    PUT lib1/_doc/2?version=6&version_type=external
    {
        "sex":"male",
        "name":"xiaochao",
        "age":10
    }
    

    (1) 通过version_type=external标识version是外来的
    (2) ?version=6 数值必须大于document的_version
    (3) 6成为新的版本号

    相关文章

      网友评论

        本文标题:Elasticsearch第8节 版本控制

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