카디날리티 집계(Cardinality Aggregation)?

엘라스틱서치 에서 제공하는 approximation aggregation으로 필드에서 고유한 값의 대략적인 개수를 계산한다.

 

HyperLogLog++(HLL) algorithm (확률적 자료구조 기반 알고리즘)

엘라스텍서치의 cardinality 는 HLL 알고리즘을 기반한다.

(wiki : https://en.wikipedia.org/wiki/HyperLogLog)


HLL 알고리즘의 특징 : 

  • 정확도(precision) 설정 가능
    단, 정확도를 올릴 수록, 메모리 사용량이 증가
  • cardinality가 낮은 집합일 수록 정확도가 높아진다.
  • 메모리 사용량이 고정적
  • 메모리 사용량은 정확도에 비례

정확도 설정

  • precision_threshold (0 ~ 40,000)
  • 일반적으로 cardinality가 precision 보다 적다면 거의 항상 100% 정확
  • 메모시 사용률 =  precision_threshold * 8 bytes

 그래프.1 threshold 에 따른 에러율 


 

성능 향상을 위한 방안

  • cardinality 대상 필드를 hash 로 정의한다.
  • 단 cardinality 가 크거나 string 인 경우만 효과적이다.

좀 더 자세히 


'생활데이타 > ElasticSearch' 카테고리의 다른 글

[logstash] JDBC input plugin  (0) 2017.03.31
[ElasticSearch] 검색/집계 (Aggregation)  (0) 2016.06.05


집계(aggregation) 

  • 검색 결과에 다양한 연산 적용
  • RDBMS 의 groupby 와 유사
  • 집계 종류에는 매트릭(metric), 버킷(bucket), 파이프라인(pipeline) 등이 있다.

0. 참고

본 포스트는 elastic search 버전 2.3 으로 작성되었습니다.
참고) https://www.elastic.co/

1. 종류

1) 매트릭 (metric)

  • 도큐먼트를 계산해서 처리된 값을 구한다.
  • 타입 리스트
    • Avg Aggregation
    • Cardinality Aggregation
    • Extended Stats Aggregation
    • Geo Bounds Aggregation
    • Geo Centroid Aggregation
    • Max Aggregation
    • Min Aggregation
    • Percentiles Aggregation
    • Percentile Ranks Aggregation
    • Scripted Metric Aggregation
    • Stats Aggregation
    • Sum Aggregation
    • Top hits Aggregation
    • Value Count Aggregation

2) 버킷 (bucket)

  • 조건에 해당하는 도큐먼트를 버킷이라는 저장소 단위로 구분해 담아 새로운 집합을 생성한다.
  • 타입 리스트
    • Children Aggregation
    • Date Histogram Aggregation
    • Date Range Aggregation
    • Filter Aggregation
    • Filters Aggregation
    • Geo Distance Aggregation
    • GeoHash grid Aggregation
    • Global Aggregation
    • Histogram Aggregation
    • IPv4 Range Aggregation
    • Missing Aggregation
    • Nested Aggregation
    • Range Aggregation
    • Reverse nested Aggregation
    • Sampler Aggregation
    • Significant Terms Aggregation
    • Terms Aggregation

3) 파이프라인 (pipeline)

  • 집계의 결과를 다른 집계에 활용한다.
  • 레벨에 따라 부모/자식 집계로 나뉜다.
  • buckets_path 지정 필수
  • 타입 리스트
    • Avg Bucket Aggregation

    • Derivative Aggregation

    • Max Bucket Aggregation

    • Min Bucket Aggregation

    • Sum Bucket Aggregation

    • Stats Bucket Aggregation

    • Extended Stats Bucket Aggregation

    • Percentiles Bucket Aggregation

    • Moving Average Aggregation

    • Cumulative Sum Aggregation

    • Bucket Script Aggregation

    • Bucket Selector Aggregation

    • Serial Differencing Aggregation

2. 매트릭 집계 구조

GET /{index_name}/_search?pretty

   "size": 0,

   "aggs": { // 집계 

      "my_aggs": { // 집계 명 (사용자 정의)

         "{metric_arrgs_type}": { // 집계 타입 

            "field": "{file_name}" // 집계 대상 필드

             "order" : { "{field_name}" : "desc" } // 정렬

         }

      }

   }


!!) 매트릭 집계중 카디날리티 집계(Cardinality Aggregation)은 근사 집계로 정확한 값이 대신 유사값을 구한다.

(카디날리티 집계(Cardinality Aggregation) 포스트 참고 )



3. 버킷 집계 구조

GET /{index_name}/_search?pretty

   "size": 0,

   "aggs": { // 집계 

      "my_aggs": { // 집계 명 (사용자 정의)

         "{bucket_arrgs_type}": { // 집계 타입 

            "field": "{file_name}" // 집계 대상 필드

             "order" : { "{field_name}" : "desc" } // 정렬

         }

      }

   }



4. 파이프라인 집계 구조

GET /hotels/_search?pretty

{

   "size": 0,

   "aggs": {

      "{parent_aggs_name}": { // 부모 집계 이름 (사용자 정의)

         "{bucket_type_name}": { // 버킷 집계 타입 이름

            "field": "{field_name}" // 버킷 집계 대상 필드

         },

         "aggs": {

            "{aggs_name}": { // 집계 이름 (사용자 정의)

               "{metric_aggs_type}": { // 매트릭 집계 타입

                  "field": "{field_name}" // 매트릭 집계 대상 필드

               }

            }

         }

      },

      "{pipe_arrgs_name}": { // 파이프라인 집계 이름(사용자정의)

         "{pipe_arrgs_type}": { // 파이프라인 집계 타입 

            "buckets_path": "{parent_aggs_name} >{aggs_name}" // 경로

         }

      }

   }

} 




+ Recent posts