elastic search - single document creating, deleting, indexing
하나의 도큐먼트 삭제, 업데이트, 인덱싱
- 클라이언트가 create, index or delete 요청을 예를 들어, node 1 에 보낸다.
- 도큐먼트 id를 통해서 어떤 shard 에 있는지 파악. 해당 shard의 primary shard가 있는 노드에 해당 요청 전송.
- 해당하는 shard가 각 replica shard에 해당 도큐먼트 존재하는지 파악(동시에). 요청 처리 후, 처음 요청을 받은 Node1 에 해당 요청 결과를 알려준다.
도큐먼드 읽어오기
- 클라이언트가 특정 노드 1에 요청을 보낸다.
- 해당 도큐먼트가 존재하는 shard를 파악한 후, 해당 shard의 복제본 모두에게 전송을 보낸다. 해당 도큐먼트가 존재하는 노드가 처음 요청을 받은 노드에 결과를 반환하고, 최종적으로 클라이언트에게 처음 요청받은 노드가 반환한다.
도큐먼트 부분적 업데이트
- 클라이언트가 특정 노드 1에 요청을 보낸다.
- 해당 도큐먼트가 있는 Primary shard가 존재하는 노드에 포워드한다.
- 포워드 된 노드가
_source
필드에 있는 json을 변경시킨다. 그리고 reindex
한다. 만일 도큐먼트가 이미 다른 프로세스에 의해 변경되었다면, retry_on_conflict
의 설정된 값까지 재시도하고, 이후 포기한다.
- 만약 요청이 성공적으로 완료되었다면,
parallel
하게 replica shard가 있는 노드에 reindex 요청을 하게 된다. 그리고 해당 요청을 처리한 primary shards가 있는 노드가 클라이언트에게 해당 요청 처리 결과를 반환한다.