Programming/ElasticSearch

[ElasticSearch] 인덱스(Index) & 샤드(Shard)

dev? 2024. 7. 10. 15:22
반응형

인덱스(Index) 란? 

JSON문서가 저장되는 논리적인 공간이다. 

= 문서의 모음을 유지하는 논리적 네임스페이스이며, 각 문서는 필드의 모음이고, 필드는 데이터를 포함하는 키-값 쌍입니다. (출처 : 엘라스틱 서치 블로그 https://www.elastic.co/kr/blog/what-is-an-elasticsearch-index )

 

RDBMS를 이용한 비유를 하자면, 아래의 표와 같다. 

ElasticSearch RDBMS
인덱스 (index)  데이터베이스 (database)
매핑 (mapping) 스키마 (schema)
문서 (document) 행 (row)

[RDBMS의 경우]

1. 데이터베이스를 생성하여 데이터가 저장되는 논리적인 공간을 생성

2. 스키마를 통해 행(row)의 이름, 데이터유형(number, varchar 등) 등의 데이터베이스 정의 

스키마란? 
스키마는 데이터베이스를 구성하는 자료 개체, 이들의 성질, 이들 간의 관계, 자료의 조작 및 이들 자료 값들이 갖는 제약조건에 관한 정의를 총칭

3. 각 행(row)에 데이터 입력 

 

[ ElasticSearch의 경우 ]

- 처리 되는 큰 틀을 정리하자면 아래와 같다. 

1. 클러스터 

2. 인덱스 

3. 샤드 

4.  키-값 쌍이 있는 문서 (JSON 형태의 문서) 

 

인덱스 (Index)의 역할 

인덱스의 설계에 따라 문서의 구조 및 검색 쿼리가 결정된다. 

→ 문서가 저장되기 위해서는 반드시 인덱스가 존재해야 한다. 

 


샤드(Shard) 란? 

인덱스에 색인되는 문서가 저장(색인)되는 공간이다. 

→ 하나의 인덱스는 반드시 하나 이상의 샤드를 가진다. 

 

샤드(Shard) 의 종류 

종류 역할
프라이머리 샤드 - 문서가 저장되는 원본 샤드
- 색인과 검색 성능에 모두 영향 
레플리카 샤드 - 프라이머리 샤드의 복제 샤드 
- 검색 성능에 영향 
- 프라이머리 샤드에 문제가 발생하면 레플리캬 샤드가 프라이머리 샤드로 승격 

 

 

 

색인 과정 

  • 문서가 샤드에 저장이 될때, 프라이머리 샤드에서 문서를 분석하고 토크나이징이 되어 저장이 된 후 레플리카 샤드로 복제된다. 
  • 색인 과정 중에 분석 과정에 가장 많은 CPU와 메모리를 사용하다 보니, 레플리카 샤드 보다는 프라이머리 샤드의 개수가 색인 성능에 영향이 크다. 

 

샤드(Shard) 설정 

number_of_shards : 프라이머리 샤드 

number_of_replicas : 레플리샤 샤드 

레플리캬의 샤드의 개수는  프라이머리 샤드(number_of_shards)  X 레플리캬 샤드( number_of_replicas) 

PUT /library/_settings 

{
        "index" : {
                "number_of_shards" : 3, 	
                "number_of_replicas" : 1
        }
}

// 프라이머리 샤드 : 3 
// 레플리카 샤드 : 3
// 총 인덱스의 샤드 개수는 6개
반응형