ES 다중인덱스 조회시 향상을 위한 방안

개발새발·2023년 1월 1일
0

elasticsearch

목록 보기
41/54

회사에서 계속해서 다중인덱스 조회를 원하는 니즈가 있었다. 언젠가 해야지 해야지 했는데 이번에는 진짜 시작해야될듯했다… ㅠㅠ 그래서 찾아보니 검색스피드튜닝(https://www.elastic.co/guide/en/elasticsearch/reference/8.5/tune-for-search-speed.html) 을 위한 참고자료가 있었다. 사실 이전에 봤었는데 대충 지나갔었다. ^0^; 이번에는 자세히 살펴보게 되었다.

검색스피드튜닝 을 위한 방법은 여러가지가 있는데, 하드웨어 변경이 아닌 인덱스 설정이나 쿼리 설정을 바꿀 수 있는 선안에서 해결해보고자 했다. 살펴보니 script, nested 쿼리는 사용하지 말라고 했는데(사실 알고 있었음..ㅠ) 이미 사용할 수밖에 없는 서비스가 되어버려 패스…. 그나마 발견한 방법들이 아래와 같았다.

장점단점
인덱스 정렬• 인덱스를 정렬해둔 것과 동일한 필드로 정렬하는 쿼리문을 호출하여 그에 대한 결과를 반환하도록 요청하고자 한다면, 이때 Elasticsearch에서 이미 인덱스 정렬을 해뒀기 때문에 쿼리 시점에 그에 결과를 정렬할 필요가 없음
• 필드 간에 AND를 사용하는 쿼리일 경우, 이러한 필드에 대한 인덱스 정렬은 필드를 그룹화함
• 디스크 공간을 약 40% 절약할 수 있음
• 성능테스트 필요 → 실서버가 이미 오픈되어 실서버 환경으로 테스트할 수 없음
• 정렬된 인덱스이기 때문에 저장시 쓰기성능이 40~50%까지 떨어질 수 있음
• 인덱스 생성 시 정의하기 때문에 인덱스를 다시 생성해야함
eager global ordinal• 집계 성능을 최적화하는 데 사용
• fielddata를 활성화한 text, keyword..에서 사용
• 사전식 순서로 각 고유 용어에 대해 증분 번호를 매겨 사용하여 매핑 (아래 참고자료 참고)
• JVM 힙에 저장
• 기본값은 false → 검색시 로드됨 / true → 인덱싱시 로드됨
• 성능테스트 필요 → 실서버가 이미 오픈되어 실서버 환경으로 테스트할 수 없음
• 필드 새로 매핑 필요한지 체크
기존 로직 변경대외비대외비

참고:

검색 스피드 튜닝
https://www.elastic.co/guide/en/elasticsearch/reference/8.5/tune-for-search-speed.html

인덱스 정렬
https://www.elastic.co/kr/blog/space-savings-a-lesser-known-benefit-of-index-sorting-in-elasticsearchhttps://ksk-developer.tistory.com/45https://www.elastic.co/guide/en/elasticsearch/reference/master/index-modules-index-sorting.html

eager global ordinal
https://www.elastic.co/guide/en/elasticsearch/reference/8.5/eager-global-ordinals.htmlhttps://wedul.site/502https://hexists.tistory.com/161https://ksk-developer.tistory.com/26https://medium.com/driven-by-code/elasticsearch-global-ordinals-31df2806391f

profile
발새발개

0개의 댓글