[오픈서치] 1. index templates

연쇄코딩마·2023년 8월 25일
0
post-thumbnail

사이드 프로젝트

프로젝트를 진행하면서 많은 양의 데이터를 처리하다 보니 디비에서 받아오는 퍼포먼스가 너무 떨었다. 물리적으로 한 데이터를 카테고리 별로 인덱스를 물리적으로 분리를 했어야 했는데 시행착오를 많이 겪고 나서야 알아버렸다. 그래서 템플릿을 만들어 인덱스를 효율적으로 만들수 있도록 했다. 오픈서치 공식문서를 보여 이해하고 넘어가려했다.

Index templates

인덱스 템플릿(Index Templates)은 새로운 인덱스를 생성할 때 적용되는 기본 설정과 매핑을 정의하는 데 사용됩니다. 인덱스 템플릿을 사용하면, 동일한 구성을 여러 인덱스에 쉽게 적용할 수 있으며, 향후에 새로운 인덱스에 동일한 설정을 자동으로 적용할 수 있습니다.

인덱스 템플릿은 다음과 같은 사항을 설정할 수 있습니다

  • 매핑(Mappings): 데이터 구조와 필드 데이터 타입을 설정할 수 있습니다.
  • 인덱스 설정(Index Settings): 샤드(Shard) 수, 레플리카(Replica) 수, 인덱스 코덱(codec) 등을 설정할 수 있습니다.
  • 별칭(Aliases): 이 설정을 통해 인덱스에 별칭을 적용할 수 있습니다.

새 인덱스 템플릿을 생성하려면 다음 API를 사용합니다.

PUT _template/your-template-name
{
 "index_patterns": ["pattern-*"],
 "template": {
   "settings": {
     "number_of_shards": 3,
     "number_of_replicas": 1
   },
   "mappings": {
     "properties": {
       "field1": {
         "type": "text"
       },
       "field2": {
         "type": "keyword"
       }
     }
   },
   "aliases" : {
     "your-alias" : {}
   }
 }
}

위의 예에서, "index_patterns": ["pattern-*"] 가 정의된 인덱스 템플릿을 생성하고, 이 템플릿은 이름이 'pattern-'으로 시작하는 새로운 인덱스에 자동으로 적용됩니다. 
인덱스 설정과 매핑, 별칭을 정의하는 것 외에도, 사용자는 인덱스 이름의 일정한 형식에 따라 다양한 템플릿을 적용할 수 있습니다. 이 시나리오에서는, 마지막에 생성된 인덱스에서만 자주 사용하는 쿼리를 실행하는 데 관심이 있는 것으로 가정하겠습니다. 기본적으로, 데이터의 동일한 볼륨은 Amazon OpenSearch에서 더 오래된 인덱스에 대해 저렴한 저장 클래스로 이동할 수 있습니다. 이렇게 하면 가격이 저렴해지고 고성능 쿼리 레이어를 유지할 수 있습니다. 
인덱스 템플릿을 사용하면 빠르게 새 인덱스 및 데이터 스트림을 생성하고, 일관성있는 설정을 유지하며, 더 나은 용량 및 성능 관리를 기대할 수 있습니다.

Composable Index Templates

합성 인덱스 템플릿(Composable Index Templates)은 여러 구성 요소 템플릿을 조합하여 새로운 인덱스를 생성할 때 사용되는 기본 설정 및 매핑을 정의할 수 있는 방식입니다. 합성 인덱스 템플릿은 기존 인덱스 템플릿 개념을 확장하여 템플릿 구성 요소 간의 상속을 명시적으로 지정할 수 있게 합니다.

합성 인덱스 템플릿의 핵심 요소는 다음과 같습니다:

  • 구성 요소 템플릿(Component Templates): 구성 요소 템플릿은 인덱스 설정, 매핑 및 별칭(Optinal)을 포함할 수 있는 재사용 가능한 템플릿 조각입니다. 구성 요소 템플릿을 생성하고 다양한 합성 인덱스 템플릿에 사용함으로써 동일한 설정 및 매핑 구성 요소를 여러 인덱스 템플릿에 중복되지 않게 적용할 수 있습니다.
  • 합성 인덱스 템플릿(Composable Index Templates): 명시된 구성 요소 템플릿을 사용하여 새로운 인덱스에 대한 설정 및 매핑을 정의하는 JSON 구성 파일입니다. 새 인덱스가 생성될 때 적용되고, 여러 구성 요소 템플릿에서 상속받은 설정을 조합하여 최종적인 구성을 생성합니다.

합성 인덱스 템플릿을 사용하면:

  • 구성 요소를 재사용하여 인덱스 템플릿 관리를 획기적으로 줄일 수 있습니다.
  • 구성 요소 템플릿을 결합하여 복잡한 인덱스 설정 및 매핑을 쉽게 구성할 수 있습니다.

합성 인덱스 템플릿을 사용하여 새 인덱스 템플릿을 생성하려면 다음 API를 사용하세요:

#COMPONENT TEMPLATE 1
PUT _component_template/component_template_1
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        }
      }
    }
  }
}

#COMPONENT TEMPLATE 2
PUT _component_template/component_template_2
{
  "template": {
    "mappings": {
      "properties": {
        "ip_address": {
          "type": "ip"
        }
      }
    }
  }
}

PUT _index_template/your-composable-template
{
  "index_patterns": ["your-index-pattern-*"],
  "template": {
    "settings": {
      "index.number_of_shards": 3,
      "index.number_of_replicas": 1
    }
  },
  "composed_of": ["component_template_1", "component_template_2"],
  "priority": 1
}

참고 : Index template options

옵션유형설명필수
template오브젝트인덱스 설정, 매핑 및 별칭 지정아니오
priority정수인덱스 템플릿의 우선순위아니오
composed_of문자열 배열새로운 인덱스에 적용된 구성 요소 템플릿의 이름아니오
version정수템플릿 관리를 간소화하기 위한 버전 번호 지정. 기본값은 null입니다.아니오
_meta오브젝트템플릿에 대한 메타 정보 지정아니오
profile
只要功夫深,铁杵磨成针, 하고자 하면 쇠 막대기도 바늘로 만들 수 있다

0개의 댓글

관련 채용 정보