Elasticsearch Nested 구조 검색 성능 향상

JunMyung Lee·2023년 2월 19일
0

Elasticsearch

목록 보기
8/37

문서가 색인되어 있는 논리/물리적 관계

1:N관계인 Nested구조에서, 질의식이 들어왔을 때, 검색 속도가 오래 걸리는 이유는 물리적 관계처럼 구성이 되어 있기 때문에, 부모의 하위 자식들을 찾는데 (Fetch) 오래걸리기 때문이다.
이는 곧 검색에서 자원을 소비하는 것이 아닌, 찾는데 쓰기 때문에 자원 소모는 없고 단순히 시간만 걸린다.

검색 결과 과정

Nested

  • 압축 해제
  • 관계 - 이단계가 오래걸리는 단계 ( 하위 문서 Fetch )
  • 파싱

Flat

  • 압축 해제
  • 파싱

Flat 구조로 바꾸면 될까?

부모 * 자식 만큼 문서수가 증가하기도 하지만, 무엇보다 집계 쿼리시, 속도에 영향이 있다.

이슈 케이스

  • CPU / Memory는 낮은데 여러 요청이 지속적으로 들어오면 서버 사용량은 증가하지 않는데 reject(거절)이 발생할 수 있다. (코어는 작업중이므로)
  • 검색 속도가 느려진다.

해결방안

검색 질의의 결과로 _source로 호출하기 보다는, _source는 false로 지정하고 doc_values를 사용해보자. doc_values는 Forward index 구조로 문서의 원문 위치값을 저장하고 있어서 Fetch시 순차적으로 찾지 않아도 바로 위치를 알 수 있다

0개의 댓글