반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[es] Warm up global ordinals 본문

ElasticStack/Elasticsearch

[es] Warm up global ordinals

닉의네임 2023. 9. 25. 08:00
반응형

전역 서수는 집계 성능을 최적화하는 데 사용되는 데이터 구조입니다. 이는 느리게 계산되어 필드 데이터 캐시의 일부로 JVM 힙에 저장됩니다. 버킷팅 집계에 많이 사용되는 필드의 경우 요청을 수신하기 전에 Elasticsearch에 전역 서수를 구성하고 캐시하도록 지시할 수 있습니다. 힙 사용량이 증가하고 새로 고침 시간이 더 오래 걸릴 수 있으므로 이 작업은 신중하게 수행해야 합니다. 이 옵션은 Eager 전역 서수 매핑 매개변수를 설정하여 기존 매핑에서 동적으로 업데이트될 수 있습니다.

 

맵핑 옵션 

PUT index
{
  "mappings": {
    "properties": {
      "foo": {
        "type": "keyword",
        "eager_global_ordinals": true
      }
    }
  }
}

테스트 해보자

데이터셋의 구조는 아래와 같다. 

다른 정보에 비해 비교적 카디널리티가 낮은 국가코드로 보이는 3번째 항목만 색인 할 예정

 

실행해보니 문제가 많다 우선 타임스템프 파이프 라인 부터  처리해보잣

 

 

 

타임스템프 파이프라인 생성 

PUT /_ingest/pipeline/timestamp
{
  "description": "Creates a timestamp when a document is initially indexed",
  "processors": [
    {
      "set": {
        "field": "_source.timestamp",
        "value": "{{_ingest.timestamp}}"
      }
    }
  ]
}

다시 실행하니 잘 되네 

음.. 데이터가 몇건이였더라..

800만건이였나. 일단 색인될때까지 대기

 

가만보면 인덱스 2개를 만들지 않고 필드 2개로 옵션만 다르게 처리할껄 그랬나보다

변경 - 인덱스 하나에서 두가지 타입의 필드로 색인 후  aggs 해볼 예정 

 

AGGS 쿼리

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "COUNTRY": {
      "terms": {
        "field": "country_code"
      }
    }
  }
}

AGGS ORDINALS 쿼리

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "COUNTRY_ORDINALS": {
      "terms": {
        "field": "country_code_ordinals"
      }
    }
  }
}

50회 실행



size 0 으로 실행하며 캐싱이 된다고 하니  0으로 실행

확실히 캐싱 빨이 있다. 

근데 AGGS 랑 AGGS ORDINALS 가 다른 필드를 집계한건데 캐싱이 같이 먹히는 것 같은데 .. 

 

AGGS 이름을 키로 케싱이 되는것을 확인 

 

이 옵션은.. 

"eager_global_ordinals": true

뭐지..

반응형
Comments