Metrics, Bucket Aggregation
Aggregation
- v5.0이후로 집계기능이 대폭강화
- ES는 많은 양의 데이터를 잘라서 관리
- 문서의 수가 늘어나도 좀 더 실시간에 가깝게 처리가능
- 데이터를 그룹화하고 통계값을 얻을 수 있음
- Cost가 크다
- master 노드가 노드의 데이터를 Aggregate해서 결과를 전달
- 결과는 cache에 저장
- 이미 계산된 결과는 Cache를 통해 빠르게 가져올 수 있다
- 종류
Cache
Node Query Cache
- query에 따른 결과를 cache
- node 레벨로 동작
- 캐시가 가득차면 최근에 가장 적게 사용된 쿼리결과가 제거됨(LRU)
- 계산이 필요한 query, aggregation등은 node query cashe가 적용되지 않음
- index.quereis.cashe.enabled: 활성화 유무
- indices.queries.cache.size: 보통 heap 메모리의 1%사용
- filter query만 cache
Shard Request Cache
- 검색요청이 인덱스 또는 여러 인덱스에 대해 실행될때
- 관련된 각 샤드는 검색을 로컬환경에서 실행 후 결과를 coordianting node로 반환
- coordinating node는 각각의 결과를 수집하여 global 결과 집합으로 모음
- 모은 후 , 각 샤드에서 로컬결과를 캐시
- size: 0일때만 cache,문서를 리턴받지 않고 집계 데이터만 사용하는것
- shard 단위로 캐싱
- shard 내의 문서에 변화가 생기면 cache는 무효화
- 문서의 변화가 거의없는 정적인 shard에서 사용하는것을 권장
Field Data Cache
- 검색 결과가 포함된 문서를 빠르게 접근하기 위한 캐시
- 집계 연산 수행할때 사용됨
- 모든 필드의 값을 메모리에 로드, cost가 많이듬
- 일단 먼저 메모리에 데이터를 올리는 방식이기에 OOM발생가능
- Circuit breaker 필요
- 메모리에 올리기 전에 데이터의 사이즈를 측정하여 OOM을 막는 방식
- indices.breaker.fielddata.limit로 제한 (default 40%)
- indices.breaker.filddata.overhead: 메모리 오버헤드를 허용 (default:1.03)
Metrics, Bucket Aggregation
Metric Aggregation
- 숫자 연산 할 수 있는 값들에 대한 agg
- Bucket 단위로 특정 연산을 수행
- sum, avg, max, min
- stats: 기초통계
- cardinality: 특정 field의 unique한 수 (근사치)
- percentiles (근사치)
- geo bound, geo centroid: 지리정보
Bucket Aggregation
- 범위나 keyword 값 등을 가지고 문서를 그룹화
- 조건으로 버킷들을 만들고 버킷안의 문서를 모아 그룹으로 구분
- range: 숫자필드 값으로 범위를지정, 범위에 해당하는 버킷 생성
- histogram: 주어진 간격 크기대로 버킷을 생성
- terms: keyword필드의 문자열별 버킷 생성
- bucket agg를 사용해서 만든 bucket안에 다시 agg또는 megrics agg를 만들 수 있음
- 데이터 set을 메모리에 저장하는것, 중첩할수록 메모리 사용이 증가
- search.max_bucket으로 최대 버킷 수 정의 가능