Elasticsearch 버전 제어로 데이터 일관성 보장

9214 단어 elasticsearch

Elasticsearch 버전 제어로 데이터 일관성 보장


Elasticsearch는 낙관적인 자물쇠를 사용하여 데이터의 일치성을 확보한다. 즉, 사용자가document(문서, 즉 관계 데이터베이스에 있는 표의 데이터)를 조작할 때 이document에 대해 자물쇠를 채우고 잠금을 해제하는 작업을 할 필요가 없고 조작할 버전만 지정하면 된다.버전 번호가 일치하면 Elasticsearch는 이 동작을 순조롭게 진행할 수 있고, 버전 번호가 충돌하면 Elasticsearch는 충돌을 제시하고 이상을 던집니다. (Version Conflict Engine Exception)
#  , 
PUT /lib/user/1?version=3
{
  "frist_name": "Jane",
  "last_name": "Smith",
  "age": 32,
  "about": "I like to collect rock albums",
  "interests": ["music"]
}

#  , 
{
  "error":{
	 "root_case":[
		{
		   "type": "version_conflict_engine_exception",
		   "reason": "[user][4]: version conflict,current version [2] is different than the one provided [3]",
		   "index_uuid": "ICnRur_NTn2s9sM04XE_rQ",
		   "shard": "0",
		   "index": "lib"
		}
	 ],
	 "type": "version_conflict_engine_exception",
		   "reason": "[user][4]: version conflict,current version [2] is different than the one provided [3]",
		   "index_uuid": "ICnRur_NTn2s9sM04XE_rQ",
		   "shard": "0",
		   "index": "lib"
  },
  "status": 409
}

Elasticsearch의 버전 번호는 1부터 2^63-1까지 범위가 지정됩니다.
  • 내부 버전 제어: 사용 시_version.
  • 외부 버전 제어:elasticsearch는 외부 버전 번호를 처리할 때 내부 버전 번호와 약간 다르다.더 이상 검사가 아닙니다_version이 요청에서 지정한 데이터와 동일한지 확인하지 않고 현재 _버전이 지정한 수치보다 작은지 여부입니다.요청이 성공하면 외부 버전 번호가 문서의 _버전 중..

  • 유지하기 위해_version은 외부 버전에서 제어하는 데이터와 일치합니다. version_type=external
    #  , 
    PUT /lib/user/1?version=3&version_type=external
    {
      "frist_name": "Jane",
      "last_name": "Smith",
      "age": 32,
      "about": "I like to collect rock albums",
      "interests": ["music"]
    }
    
    #  version_type=external ,
    #  version ( 33),
    #  
    {
      "error":{
    	 "root_case":[
    		{
    		   "type": "version_conflict_engine_exception",
    		   "reason": "[user][4]: version conflict,current version [2] is different than the one provided [3]",
    		   "index_uuid": "ICnRur_NTn2s9sM04XE_rQ",
    		   "shard": "0",
    		   "index": "lib"
    		}
    	 ],
    	 "type": "version_conflict_engine_exception",
    		   "reason": "[user][4]: version conflict,current version [2] is different than the one provided [3]",
    		   "index_uuid": "ICnRur_NTn2s9sM04XE_rQ",
    		   "shard": "0",
    		   "index": "lib"
      },
      "status": 409
    }
    

    좋은 웹페이지 즐겨찾기