[엘라스틱서치][성능튜닝] cardinality aggs query의 성능을 조금 높이는 방법 - forewalk/elastic GitHub Wiki
Elasticsearch
성능
cardinality aggs의 특징은 몇몇가지가 있다.
1. 정확한 집계결과가 나오는 것이 아니라 추정치(?) 근사값(?)에 가까운 결과 카운트가 리턴된다. 이는 카디널리티가 hyperloglog(HLL) 알고리즘을 사용하기 때문인데, 참고 이것에 대한 프레시젼 추이는 다음을 참조해볼 수 있다. 참고 즉, 데이터가 적고, 메모리와 CPU가 크면 정확한 값을 리턴받을 수 있지만 실데이터에선 거의 근사치라고 볼 수 있겠다. 이는 고객 등에게 설명할 때 반드시 꼭 설명해야 하는 부분이다.(나중에 데이터가 왜 정확하지 않냐는 질문은 엘라스틱입장에서 참 곤란한 질문이 된다)
2. 글씨를 murmur hash 로 변경하여 속도를 월등히 빠르게 할 수 있다.
murmur 해시는 다음과 같은 개념인데, 쉽게 그림으로 표현하면 다음과 같다.
참고사이트
간단하게 설명하면 글씨를 숫자타입의 hash로 변경하는 것인데, LGU+에서 테스트 해보니 7배이상 차이가 나는 것을 확인할 수 있었다.
엘라스틱서치에 적용방법은 다음과 같은데, 플러그인 설치가 필요하다. murmur3
샘플을 보자면 다음과 같다. 아래와 같은 인덱스 매핑 구조를 살펴보면, '고객구분'의 경우 keyword / '고객번호'의 경우 hash로 적용한 예시로 볼 수 있다.
{
"고객구분" : {
"type" : "keyword",
"ignore_above" : 256
},
"고객번호" : {
"type" : "keyword",
"fields" : {
"hash" : {
"type" : "murmur3"
}
},
"ignore_above" : 256
}
}