본 포스팅은 ElasticSearch Essential 강의를 보고 작성되었습니다.
Elastic Search
- Lucene(Java) 기반 오픈소스 검색 엔진
- JSON 기반의 문서를 저장하고 검색, 분석 작업도 가능
- 준실시간 검색 시스템 - 실시간이라고 생각될 만큼 색인된 데이터가 빠르게 검색 된다.
- 고가용성을 위한 클러스터 구성
- 동적 스키마 생성 - 입력될 테이터들에 대해 미리 스키마를 정의하지 않아도 동적으로 스키마 생성
- REST API 기반의 인터페이스
- 클러스터의 정의
- 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합을 말한다.
- 노드의 종류
- 마스터 노드 - 클러스터 상태 관리 및 메타데이터 관리
- 데이터 노드 - 문서 색인 및 검색 요청 처리
- 코디네이팅 노드 - 검색 요청 처리
- 인제스트 노드 - 색인되는 문서의 데이터 전처리
- 마스터노드가 죽으면 후보 노드들 중에서 새로운 마스터가 된다.
- 어떤 노드에 호출하든 같은 역할을 한다. ex) 마스터 노드에 문서 요청을 해도 동일한 결과
- 하지만 불필요한 노드 간의 요청이 생길 수 있으므로 어디로 요청하는지는 LB 같읕 도구를 통해 역할에 충실하게 구성해주는 것이 좋다.
- 인덱스란
- 문서가 저장 되는 논리적인 공간
- 인덱스 설계가 가장 중요한 설계
- 인덱스 설계에 따라 문서의 구조 및 쿼리가 달라진다.
- Open Search에 모든 인덱스를 조회해보면 좋을 것 같다.
- 하나의 인덱스에서 확장해나가는 것을 추천한다.
- 샤드란
- 인덱스에 색인되는 문서가 저장되는 공간
- 프라이머리 샤드(원본 샤드), 레플리카 샤드(복제 및 성능을 위한)가 존재
- 총 샤드 갯수 = number_of_shards * number_of_replicas
- 문서는 샤드에 고르게 저장되므로 샤드의 개수가 바뀌면 저장되는 규친이 바뀌게 된다.
- 그러므로 한번 설정된 마스터샤드의 갯수는 변경할 수 없다.
- Mapping
- 문서의 구조 정보 - 스키마리스가 아니라 미리 정의하지 않아도 될 뿐
- 동적 매핑 - 처음 인덱싱 되는 문서를 바탕으로 매핑 정보는 ES가 동적으로 생성
- 정적 매핑 - 문서의 매핑 정보를 미리 정의
- 모든 필드를 전부 정적 매핑으로 할 필요는 없다. (유연성) - 자동으로 정의됨