ElasticSearch

Elasticsearch第8节 版本控制

2019-06-14  本文已影响0人  小超_8b2f

  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成为新的版本号

上一篇下一篇

猜你喜欢

热点阅读