이 장에서는 ‘통계를 처리하는 방법과 분산 환경에서 집계 시 주의점’ **에 대해 다룰 예정입니다.
- 5.1 집계
- 5.2 메트릭 집계
- 5.3 버킷 집계
- 5.4 파이프라인 집계
- 5.5 근삿값(Approximate)으로 제공되는 집계 연산
5.1 집계
일반적인 통계 프로그램은 데이터를 하둡이나 RDBMS에 적재하고 배치 처리하는 방식을 사용하고 있습니다.
반면, 엘라스틱 서치는 데이터를 분산하여 관리하고 있습니다. 그래서 문서가 늘어나도 배치 처리보다 실시간에 가갑게 처리할 수 있습니다.
엘라스틱서치가 SQL 보다 강력한 집계 기능을 제공하는 점들은 다음과 같습니다.
- 중첩 집계 가능
- 범위, 날짜, 위치 정보 등 집계 가능
- 인덱스를 활용한 분선 처리 가능
다음으로는 엘라스틱서치가 집계에 사용하는 기술들에 대해 알아보겠습니다.
캐시
- Node query Cache
- 노드의 모든 샤드가 공유하는 $LRU^{Least-Recently-used}$ 캐시
- 캐시 용량 초과 시 사용량이 가장 적은 데이터 제거
- 기본적으로 10%의 필터 캐시가 메모리 제어, 쿼리 캐싱 사용 여부는
index.queries.cache.enabled(default:true)
설정으로 설정
- Shard request Cache
- Field data Cache
- 엘라스틱서치는 필드에서 집계 연산 수행 시 모든 필드 값을 메모리에 로드합니다. 그래서 집계 쿼리는 성능적인 측면에서 비용이 많이 듭니다.
- 집계가 계산되는 동안 필드의 값을 메모리에 보관합니다.
집계에서 사용하는 필드 중 문자열 형태의 필드를 사용한다면 Keyword 타입으로 지정해야 합니다.