Contents
-
엘라스틱 서치 핵심 개념
엘라스틱 서치의 핵심 개념을 알아보자
엘라스틱서치와 같은 도큐먼트 지향 저장소는 데이터의 추상적 개념을 사용한다.
엘라스틱 서치의 핵심 추상화 개념은
- 인덱스
- 타입
- 도큐먼트
- 클러스터
- 노드
- 샤드 및 레플리카
- 매핑 및 타입
- 역색인
이 있다.
하나씩 알아보자
인덱스
인덱스는 엘라스틱서치에서 단일 타입의 도큐먼트를 저장하고 관리하는 컨테이너다.
인덱스에서는 단일 타입의 여러 도큐먼트를 가질 수 있다.
이해를 돕자면 ,
인덱스는 RDB 에 데이터베이스 스키마와 유사하다고 보면 된다.
타입은 테이블 도큐먼트는 테이블의 레코드다.
하지만 , RDB 의 한 데이터베이스 스키마가 여러 테이블을 가지고 있는것과는 다르게
엘라스틱서치는 단일 인덱스는 단일 타입만을 가지고 있게 된다.
타입
타입은 논리적으로 인덱스 내에 같은 도큐먼트 종류를 그룹화하고 구성하는데 유용하다.
일반적으로는 필드가 같은 도큐먼트는 단일 타입으로 그룹화 된다.
필드가 다르더라도 한 타입에 저장은 할 수 있지만 권장되진 않는다.
도큐먼트
도큐먼트는 엘라스틱서치에서 정보의 기본 단위다.
키와 밸류 쌍으로 되어있고, 키는 필드 이름 밸류는 필드 값이다.
키는 RDB 에서 열과 비슷하고 밸류는 행과 비슷하다.
도큐먼트에는 사용자가 정의한 필드값외에도 메타 필드를 갖고 있다.
메타 필드 :
_id : 기본키처럼 타입 내 도큐먼트의 고유 식별자다.
_type : 도큐먼트의 타입을 포함한다.
_index : 도큐먼트의 인덱스 이름을 포함한다.
노드
엘라스틱서치는 분산 시스템이다.
네트워크에 위치한 각 시스템에서 실행되고 , 다른 프로세스와 통신하는 다중 프로세스로 구성된다.
노드는 클러스터의 부분 집합이 될 수 있다.
노드는 엘라스틱서치 프로세스의 단일 인스턴스로 데이터 공유를 담당한다.
클러스터
클러스터는 인덱스를 호스팅하여 검색, 색인 , 집계와 같은 연산을 제공한다.
클러스터는 하나 이상의 노드로 구성된다.
같은 네트워크에서 여러 노드를 시작하면 클러스터가 자동으로 구성된다.
(config/elasticsearch.yml 파일의 cluster.name 속성을 변경 하지 않으면)
클러스터는 여러 노드로 구성될 수 있고, 각 노드는 공유 데이터를 저장하고 관리한다.
샤드 및 복제본
샤드는 단일 인덱스의 도큐먼트를 여러 노드로 분할하는데 사용된다.
단일 노드에 저장되는 양은 한계가 있고, 그 한계는 노드의 저장소, 메모리, 처리 용량 에 따라 결정된다.
따라서 샤드를 활용하면 단일 인덱스 데이터를 분할해서 클러스터의 저장소와 메모리, 처리 용량을 적절히 활용할 수 있다.
샤드에 위치한 데이터를 분할 하는 과정을 샤딩 이라고 한다.
샤드의 갯수는 디폴트가 5개 이고,
인덱스를 생성하는 시점에서 샤드 개수를 지정할 수 있다.
*인덱스를 생성하고 난 후에는 샤드 개수는 변경 할 수 없다.
이미지는 3개의 노드로 구성된 클러스터에서 5개의 샤드를 가진 인덱스가 어떻게 분산 되어있는지 볼 수 있다.
인덱스에 쿼리를 수행하면 엘라스틱서치는 각 샤드에 모든 요청을 보낸후 결과를 통합한다.
근데 만약 이때 노드1 이 장애가 난다면?
해당 샤드가 손실이 나버린다..
이런 분산 시스템에서는 하드웨어 장애에서도 안전하게 실행이 되어야하는데,
이걸 엘라스틱서치에서는 레플리카 샤드로 문제를 해결한다.
노드1 이 장애가 나도 노드2 노드3 이 샤드를 가지고 있다.
주 샤드가 장애가 발생하면 주 샤드로 승격 될 수 있다.
매핑 및 타입
각 도큐먼트는 다양한 필드로 구성되어 있다.
근데 다양한 필드 중에서도 공통된 필드 들이 있다.
이런 공통 필드들이 개별 도큐먼트를 어떤 인덱스로 식별 할 수 있게 해준다.
이걸 매핑이라고 한다.
매핑은 나중에 좀 더 알아보도록 하자.
역색인
역색인은 텍스트 검색을 지원하는 시스템에서 핵심 데이터 구조다.
도큐먼트에 나오는 용어를 도큐먼트에 매핑하는 방식으로 사용한다.
도큐먼트의 용어가 어디 인덱스에 있는지 쪼개서 나타내는 용도
용어는 알파뱃 순서로 정렬이 되어있어서, 굉장히 빠른 검색이 가능하다.
역색인도 다음에 더 알아보도록 하자.
참고 문헌 : 엘라스틱 스택 6 입문
'데이터처리 > elasticSearch' 카테고리의 다른 글
elasticsearch 성능 극대화 (0) | 2021.08.30 |
---|---|
elasticsearch 데이터 검색 & 분석 (0) | 2021.08.30 |
elasticsearch 소개 (0) | 2021.08.27 |
ElasticSearch - 텍스트 정렬 (0) | 2020.10.31 |
[reference] 엘라스틱서치 - inrtoduction (0) | 2020.05.30 |