Elasticsearch第8节 版本控制
2019-06-14 本文已影响0人
小超_8b2f
ElasticSearch采用了乐观锁来保证数据的一致性,也就是说,当用户対document进行操作时,并不需要对该document作加锁和解锁的操作,只需要指定要操作的版本即可。当版本号一致时,ES会允许该操作顺利执行,而当版本号存在冲突时,ElasticSearch会提示冲突并抛出VersionConflictEngineException异常。
ElasticSearch的版本号的取值范围为1到2^63 - 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
}
- 外部版本控制:
项目中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成为新的版本号