프로젝트를 진행하면서 많은 양의 데이터를 처리하다 보니 디비에서 받아오는 퍼포먼스가 너무 떨었다. 물리적으로 한 데이터를 카테고리 별로 인덱스를 물리적으로 분리를 했어야 했는데 시행착오를 많이 겪고 나서야 알아버렸다. 그래서 템플릿을 만들어 인덱스를 효율적으로 만들수 있도록 했다. 오픈서치 공식문서를 보여 이해하고 넘어가려했다.
인덱스 템플릿(Index Templates)은 새로운 인덱스를 생성할 때 적용되는 기본 설정과 매핑을 정의하는 데 사용됩니다. 인덱스 템플릿을 사용하면, 동일한 구성을 여러 인덱스에 쉽게 적용할 수 있으며, 향후에 새로운 인덱스에 동일한 설정을 자동으로 적용할 수 있습니다.
인덱스 템플릿은 다음과 같은 사항을 설정할 수 있습니다
새 인덱스 템플릿을 생성하려면 다음 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)은 여러 구성 요소 템플릿을 조합하여 새로운 인덱스를 생성할 때 사용되는 기본 설정 및 매핑을 정의할 수 있는 방식입니다. 합성 인덱스 템플릿은 기존 인덱스 템플릿 개념을 확장하여 템플릿 구성 요소 간의 상속을 명시적으로 지정할 수 있게 합니다.
합성 인덱스 템플릿의 핵심 요소는 다음과 같습니다:
합성 인덱스 템플릿을 사용하면:
합성 인덱스 템플릿을 사용하여 새 인덱스 템플릿을 생성하려면 다음 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 | 오브젝트 | 템플릿에 대한 메타 정보 지정 | 아니오 |