상똥이의 Back-End 공부방
[Elastic Search] Elastic Search 기초 본문
1. Elastic Search란?
- 분산형 RESTful 검색 및 분석 엔진, 확장 가능한 데이터 저장소, 벡터 데이터베이스
- 오픈소스 검색엔진
- 정형 데이터, 비정형 데이터, 위치 정보, 메트릭, 파이프 쿼리 언어 등 다양한 유형의 데이터를 검색하고 결합할 수 있도록 지원
- Rest API를 사용해 CRUD 작업
Relational DB | Elastic Search |
SELECT | GET |
UPDATE | PUT |
INSERT | POST |
DELETE | DELETE |
Relational DB | Elastic Search |
select * from class where id = 1; | curl -XGET localhost:9200/classes/class/1 |
insert into class values (xxx); | curl -XPOST localhost:9200/classes/class/1 -d '{xxx}' |
update class set xxx where id = 1; | curl -XPUT localhost:9200/classes/class/1 -d '{xxx}' |
delete from class where id = 1; | curl -XDELETE localhost:9200/classes/class/1 |
2. Elastic Search의 특징
(1) 전문 검색
- 내용 전체를 색인해 특정 단어가 포함된 문서를 검색
- 기능별, 언어별 플러그인 적용 가능
(2) 역색인
- 일반적인 '색인'의 목적은 문서의 위치에 대한 인덱스를 만들어 빠르게 조회할 수 있도록 하는 것
- 역색인은 반대로 문서 내의 문자와 같은 내용물의 맵핑 정보를 색인해두는 것
- 즉 색인은 책의 목차, 역색인은 책 가장 뒷 페이지의 단어 별 페이지라고 할 수 있음
- 정형화되지 않은 문서도 자동으로 색인하고 검색
(3) 통계 분석
- 비정형 로그 데이터를 수집해 통계 분석에 활용할 수 있음
- kibana를 연결해 실시간으로 로그를 분석하고 시각화할 수 있음
(4) Restful API
- HTTP 기반의 Restful활용
- 요청/응답에 JSON 형식을 사용하여 운영체제나 시스템에 제한되지 않고 다양한 플랫폼에서 활용
(5) multi tenancy
- 상이한 인덱스일지라도 검색할 필드명만 같다면 여러 인덱스를 한 번에 조회 가능
(6) document oriented
- 여러 계층 구조의 문서로 저장
- 계층으로 나뉘어져 있어도 한 번의 쿼리문으로 쉽게 조회
(7) 확장성
- 분산 구성이 가능 (분산된 환경에서 데이터는 shard라는 단위로 나뉨)
(8) transaction rollback을 지원하지 않음
- 전체 클러스터의 성능 향상을 위해 비용 소모가 큰 롤백과 트랜잭션을 지원하지 않음
3. 기본 용어
(1) index
- 데이터 저장공간
- 하나의 물리 노드에 여러 개의 논리 인덱스 생성
- 하나의 인덱스가 여러 노드에 분산 저장됨 (M:N)
(2) shard
- 색인된 문서는 하나의 인덱스
- 인덱스 내부에 색인된 데이터는 여러 개의 파티션으로 나뉘어 구성됨
- 파티션 = 샤드
(3) type
- 인덱스의 논리적 구조
(4) document
- 데이터가 저장되는 최소 단위
- JSON포맷으로 저장
(5) field
- 문서를 구성하기 위한 속성
- 데이터베이스의 컬럽과 비교할 수 있음
- 하나의 필드는 목적에 따라 다수의 데이터 타입을 가짐
(6) mapping
- 문서의 필드, 필드 속성을 정의하고 그에 따른 색인 방법을 정의하는 프로세스
- 스키마 정의 프로세스
Relational DB | Elastic Search |
Database | Index |
Partition | Shard |
Table | Type |
Row | Document |
Column | Field |
Schema | Mapping |