1) 하나의 인덱스를 사용할 때
장점: 관리해야 할 인덱스의 수가 적어 관리 리소스가 적게 발생한다.
단점: 쿼리와 문서의 구조가 복잡해질 수 있다.
2) 여러 개의 인덱스로 나눌 때
장점: 각각의 경우에 최적화된 쿼리와 문서 구조를 사용할 수 있다.
단점: 관리해야할 인덱스의 수가 많아 관리 리소스가 발생할 수 있다.
인덱스에 색인되는 문서가 저장되는 공간
하나의 인덱스는 반드시 하나 이상의 샤드를 가진다.
1) 프라이머리 샤드 : 문서가 저장되는 원본 샤드, 색인과 검색 성능에 모두 영향을 줌
2) 레플리카 샤드 : 프라이머리 샤드의 복제 샤드, 검색 성능에 영향을 줌
프라이머리 샤드에 문제가 생기면 레플리카 샤드가 프라이머리 샤드로 승격
문서의 구조를 나타내는 정보
ElasticSearch는 스키마리스가 아니라 미리 정의하지 않아도 된다.
동적 매핑(Dynamic Mapping) : 처음 색인되는 문서를 바탕으로 매핑 정보를 ElasticSearch가 동적으로 생성
정적 매핑(Static Mapping) : 문서의 매핑 정보를 미리 정의
문서를 분석하고 저장하는 과정을 색인이라고 정의합니다.

엘라스틱서치는 클러스터로 구성이 되기 때문에 어떤 노드에 요청을 해도 동일한 응답을 보장함
프라이머리 샤드가 1개이면 색인이 하나의 데이터 노드에서만 일어난다.
엘라스틱 서치는 클러스터로 구성되기 때문에 노드를 증설하면 성능도 함께 증설할 수 있지만 적절한 수의 샤드 개수를 설정하는 것이 성능에 가장 큰 영향을 미친다는 것을 이해하고 있어야한다. 최대한 많은 노드들이 색인에 참여하고 있는지 샤드의 개수로 설정할 수 있다.
색인에는 가장 큰 작업이 분석을 통해서 역색인 인덱스를 만드는 작업이 있다. 이게 가장 CPU를 많이 사용하고 메모리를 많이 사용하는 작업이다.
ElasticSearch 공식 문서에도 사이징 샤드 사이즈라는 문서가 있다. 처음부터 완벽하게 샤드 배치 계획을 세울 수는 없기에 배치 계획을 세운 후에 계속 테스트하고 클러스터를 살펴보면서 샤드 배치 계획을 완성해야한다.
하루에 100GB의 로그를 30일간 저장하는 클러스터
필요한 저장 공간 100GB x 2(레플리카) x 30 = 6000GB
인덱스별 샤드의 최대 크기를 10GB를 설정하면 인덱스 별 프라이머리 샤드의 개수는 10개
데이터 노드의 개수를 10개로 설정하면 데이터 노드 당 가져야 할 디스크의 크기는 600GB
데이터 노드의 장애를 대비해서 700GB 정도로 설정
색인은 인덱스를 생성하고, 매핑을 확인하고 inverted index를 생성하고 문서를 저장하는 일련의 과정을 의미합니다.
색인은 프라이머리 샤드에서 일어납니다.
number_of_shards의 기본값은 1이기 때문에 별도로 설정하지 않는다면 클러스터로서의 이점을 살릴 수 없는 경우가 발생합니다.
적절한 샤드의 개수는 색인 성능을 향상시키는데 많은 영향을 끼칩니다.