Elastic Search

[Elasticsearch] update by query 정리

꾸준함. 2021. 7. 22. 20:04

update by query 과정 도식화

 

 

update by query 과정

  1. update by query 요청은 coordinating node에서 수신하고 처리되며 요청을 받자마자 인덱스의 snapshot이 생성
  2. snapshot이 생성되면서 쿼리 조건에 맞는 모든 document들을 찾기 위해 각각의 인덱스들에 search query가 전송됨
  3. 쿼리 조건에 맞는 document들을 찾으면 document를 업데이트하기 위해 bulk request가 전송됨
  4. bulk request의 결과 내 batches 필드를 통해 document를 회수하기 위해 사용된 배치 수를 파악할 수 있으며, 반환된 document의 개수가 만개를 넘어설 것을 대비해 search query는 scroll API를 사용 
  5. search query와 bulk request는 짝을 이루며 순차적으로 인덱스에 전송이 됨
  6. 요청들을 동시에 전송하지 않는 이유는 업데이트 오류 처리 과정과 밀접한 연관이 있음
  7. es는 업데이트 오류 발생 시 디폴트로 10번을 재시도하며 10번을 재시도해도 실패할 경우 query 전체가 취소됨
  8. 쿼리 실패 시 result 내 "failures" 필드를 참고하면 어디서 실패했는지 확인 가능
  9. 쿼리가 실패한다고 해서 RDBMS transactional 기능처럼 기존 업데이트 건도 rollback이 되는 것이 아니라 기존 업데이트 건은 그대로 업데이트가 되고 실패한 document 이후 document들에 대해서는 업데이트 요청도 하지 않음

 

* A B C 요청이 있었을 때 A에서 성공, B에서 실패 시 C에 대해서는 요청도 안 보냄

* delete_by_query도 update_by_query와 동일한 프로세스로 진행

 

출처

Udemy (elasticsearch-complete-guide)

반응형