1. Elasticsearch란?
Apache Lucene 기반의 JAVA 오픈소스 분산 검색 엔진이다.
방대한 양의 데이터를 신속하게 저장, 검색, 분석 등의 기능을 제공한다.
Elasticsearch는 검색을 위해 단독으로 사용되기도 하며, ELK Stack으로 함께 사용되기도 한다.
ELK Stack?
- Logstash
- 다양한 소스의 로그 또는 트랜잭션 데이터를 수집, 집계 파싱하여 ES로 전달
- Elasticsearch
- Logstash로부터 받은 데이터를 검색 및 집계를 통해 필요한 정보를 형식에 갖춰 저장
- Kibana
- 데이터 시각화 및 모니터링에 활용
2. RDBMS vs Elasticsearch
RDBMS
- 단순 텍스트매칭에 대한 검색만 제공
- 정형 데이터만 관리하고 검색
Elasticsearch
- 텍스트의 특징을 이용한 동의어나 유의어를 활용한 검색이 가능
- 비정형 데이터의 색인과 검색이 가능(빅데이터에서 매우 중요)
- 역색인 지원으로 매우 빠른 검색이 가능
3. Elasticsearch 용어
RDBMS | Elasticsearch |
table | index |
partition | shard |
row | field |
schema | mapping |
SQL | Query DSL, KQL |
- 색인(indexing)
- 데이터를 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환하여 자장하는 과정
- index
- 색인된 데이터가 저장되는 저장소
- search
- index에 들어있는 검색어 토큰들을 포함하고 있는 문서를 찾아가는 과정
- Query
- 사용자가 원하는 문서를 찾거나 집계 결과를 출력하기 위해 사용하는 검색어ruda
- shard
- index 내부에 색인된 데이터는 물리적인 공간에 여러 개의 Partition으로 나뉘어 구성되는데, ES에서는 이 Partition을 shard라 한다.
- 역인덱스
- 검색 성능을 높이기 위해 매우 중요한 개념이다. 자세한 내용은 바로 아래에 이해하기 쉽게 정리하겠다.
4. 역 인덱스(Inverted Index)
기존의 데이터 시스템
ID | Text |
doc1 | 사과 바나나 과일 |
doc2 | 사과 원숭이 |
doc3 | 사람 |
doc4 | 과일 사람 |
일반적인 RDBMS의 경우 위와 같이 테이블 형식으로 데이터를 저장한다. “사과”가 포함된 데이터를 조회하려면 Like 연산자를 사용하고, 한줄씩 검사하면서 데이터를 찾을 것이다.
하지만 Elasticsearch에서는 역인덱싱을 제공하여, 이러한 검색 성능을 크게 높였다.
역인덱스
Term | ID |
사과 | doc1, doc2 |
바나나 | doc1 |
과일 | doc1, doc4 |
원숭이 | doc2 |
사람 | doc3, doc4 |
추출된 각 키워들을 Term이라 부르는데 Term에 해당되는 데이터를 역인덱싱 방식으로 제공하여, “사과”가 포함된 데이터를 검색하면 “사과”를 포함한 Document ID를 한번에 불러올 수 있다.
5. Elasticsearch 장점
- 대량의 비정형 데이터 보관 및 검색 가능
- 오픈소스 검색엔진으로 무료로 사용 가능
- 비정형 로그 데이터를 수집하고 한 곳에 모아서 통계 분석이 가능 하며, 키바나를 이용하여 시각화도 가능하다.
- RESTful API를 통해 상호작용하며 JSON 형식으로 데이터를 인덱싱하고 검색할 수 있다.
- 서로 다른 인덱스에서도 검색할 필드명만 같으면 여러 개의 인덱스를 한번에 조회할 수 있다.
- 역색인을 지원하여 검색 속도가 빠르다.
- 일치, 범위 전체 텍스트 검색, 필터링, 집계 등 다양한 검색 쿼리를 제공한다.
- 분산 시스템 구성으로 병렬처리가 가능하고, 분산 환경에서는 데이터가 Shard라는 단위로 나누어 제공된다. (확장성, 가용성 ↑)
그럼 무조건 RDB 말고 Elasticsearch를 사용하는게 좋은건가? 라는 의문이 생길 수 있다.
하지만 아래와 같은 단점이 있기 때문에 대체할 수는 없어 보인다.
6. Elasticsearch 단점
- 데이터 색인 과정과 커밋, 플러시 과정을 거치기 때문에 실시간 처리에 적합하지 않다.
- 트랜잭션과 롤백 기능을 제공하지 않는다.
쿼리참고
Elasticsearch는 Restful API를 통해 데이터 CRUD 작업을 수행한다.
Elasticsearch와 쿼리에 대한 내용은 아래의 가이드북을 참고 하면 많은 도움이 될 것이다.
Elastic 가이드 북 - Elastic 가이드북
7. 인덱스 설정과 매핑 - Settings & Mappings
esbook.kimjmin.net
'Data Infra > Elasticsearch' 카테고리의 다른 글
[kibana] dnf(yum) 으로 kibana설치 (0) | 2024.09.27 |
---|---|
[Elasticsearch] dnf(yum) 으로 elasticsearch.5.16.16 설치 (1) | 2024.09.11 |