1. 엘라스틱서치?
- Apache Lucene기반의 자바 오픈소스기반의 분산 검색엔진
- restAPI를 기본으로 지원하고, 데이터 조회, 입력, 삭제를 HTTP프로토콜을 이용한 restAP로 처리
2. 특징
1. Scale Out
샤드라는 개념을 통해 규모가 수평적으로 늘어날 수 있음
2. 고가용성
레플리카를 통해 데이터의 안전성 및 신뢰성을 보장
3. Restful
데이터의 CRUD작업은 HTTP restfulAPI를 통해 수행
Data CRUD | Elastic Search Restful |
---|
SELECT | GET |
INSERT | PUT |
UPDATE | POST |
DELETE | DELETE |
3. 엘라스틱서치 종류
1. Elastic Search
- 루씬(Apache Lucene) 기반의 Full Text로 검색이 가능한 오픈소스 분석 엔진
- Rest API를 이용하여 처리하고, 대량의 데이터를 신속하게 저장, 검색, 분석 가능
2. Logstash
- 플러그인을 이용하여 데이터 집계와 보관, 서버 데이터 처리를 담당
- 파이프라인으로 데이터를 수집해 필터를 통해 변환 후 ElasticSearch로 전송
- Logstash의 데이터 처리: 입력 -> 필터 -> 출력
- 입력: 데이터 저장소에 데이터를 입력
- 필터: 데이터 확장, 변경, 필터링, 삭제등 가공 작업
- 출력: 데이터를 데이터 저장소로 전송
3. Kibana
- Elastic Search의 빠른 검색을 통해 데이터 시각화 및 모니터링
- Elastic Search에 색인된 데이터들을 관리 및 가공할 수 있는 Node.js기반의 관리 도구
- Discover, Visualize, DashBoard 3개의 기본 메뉴와 다양한 App들로 구성 및 플러그인을 통해 설치 가능
4. Beats
- 데이터를 Logstash 혹은 Elastic Search로 전송하는 도구
- Logstash와 비슷한 기능을 가진 경량 로그 수집 파이프라이닝 툴 -> Go언어로 개발됨

4. Elastch Search vs DB
DB | Elastic Search |
---|
Table (테이블) | Index (인덱스) |
Row (행) | Document (문서) |
Column (열) | Field (필드) |
Schema (스키마) | Mapping (매핑) |
5. Elastic Search 아키텍쳐
Elastic Search의 개념들은 RDBMS에서도 존재하는 개념임

1. 논리적 구조
0) 요약
색인 (Indexing) - 데이터를 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환하여 저장하는 과정
검색 (Search) - 인덱스에 들어있는 검색어 토큰들을 포함하고 있는 문서를 찾아가는 과정
질의 (Query) - 사용자가 원하는 문서를 찾거나 집계 결과를 출력하기 위해 사용하는 검색어 혹은 검색 조건
1) Document
- Elastic Search 데이터의 최소 단위
-> RDBMS의 Row와 유사한 개념
2) Field
- Document에 들어가는 데이터 타입
- RDBMS에서 Column과 유사한 개념이나 보다 동적임
-> RDBMS에선 하나의 Column이 하나의 데이터 타입만 가질 수 있으나, Elastic Search에서는 하나의 Field는 여러 개의
타입을 가질 수 있음
3) Index
- 색인 과정을 거친 결과물 혹은 색인된 데이터가 저장되는 저장소를 의미
-> RDBMS에서 TABLE과 유사한 개념
- Ealsic Search에서는 Document들의 논리적인 집합을 표현
4) Mapping
- Mapping은 Field와 Field의 속성 및 색인 방법을 정의
- Mapping정보에 여러 가지 데이터 타입 지정이 가능하나, Field의 이름 중복 불가능

2. 물리적 구조
1) Cluster
- Elastic Search에서 가장 큰 시스템 단위를 의미하며 최소 1개 이상의 노드로 이루어진 노드들의 집합
- 서로 다른 클러스터끼리는 데이터 교환, 접근을 할 수 없는 독립적 시스템으로 유지
- 여러 대의 서버가 1개의 클러스터를 구성할 수 있고, 1개의 서버에 여러 개의 클러스터가 존재 할 수 있음
2) Node
- Elastic Search 클러스터에 포함된 단일서버로서 데이터를 저장, 클러스터의 색인화 및 검색 기능에 참여
- 노드는 클러스터처럼 이름으로 식별되고, 특정 노드를 이름으로 정의할 수 있고, 관리 목적에 맞게 정의
3) Shard
- 인덱스내부에는 색인된 데이터들이 존재하는데, 이 데이터들은 하나로 뭉쳐서 존재하지 않고 물리적 공간에 여러 개의 부분들로
나눠서 존재하는 것을 의미
4) Segment
- Elastic Search에서 Document의 빠른 검색을 위해 설계된 자료구조
- 각 샤드는 다수의 세그먼트로 구성
- Elastic Search에 데이터를 저장하면, 이것을 메모리에 모아두고, 새로운 세그먼트를 디스크에 기록하여 검색을 Refresh
-> 이로 인하여 새로운 검색 가능한 세그먼트가 생성됨
5) Replica
- 레플리카 또는 또 다른 형태의 샤드라고 말한다.
- 노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드를 복제한 것
-> 따라서, 샤드와 레플리카는 서로 다른 노드에 존재하는 것을 권장
![업로드중..]()