ElasticSearch : 검색 , 분석 엔진으로 대량의 데이터를 실시간으로 색인(Indexing)하고 검색(Searching)하고 분석(Ananyzing)하며 시각화(Visualizing)할 수 있다.
ES는 다양한 언어에 대해 Restful API를 제공하므로 프로그래밍 기반으로 ES를 사용할 수도 있다.
ES 기본 개념
Index : Document를 저장하는 논리적 구분자 ( ~= RDB의 Table )
Document : ES에서 실제 데이터를 저장하는 단위 ( ~= RDS의 Table 내 Row )
Document CRUD
- Create(인덱싱) : Document를 특정 Index에 포함시킴
- Read : DSL(Domain Specific Language) 사용하여 Index 내 모든 Document 조회
GET index_name/search
- Update
- Delete
Mapping : 대용량 데이터를 빠르게 실시간으로 검색할 수 있도록 바꿔주는 과정
(JSON 형태의 데이터를 Lucene이 이해할 수 있도록 바꿔주는 작업)
ES 컴포넌트
- Master : 전반적인 관리 담당 (인덱스 생성, 노드 추가 및 제거, 헬스 체크 등)
- Coordinator : 검색 요청을 받고 각 노드에 분산하여 요청 처리
- Ingest : 데이터 전처리에 대한 변환 및 파싱, 필터링 등 수행
- Data : 데이터를 저장하는 노드이며 데이터 복제 및 검색 쿼리 처리에 사용. 가장 많은 CPU, Memory 리소스를 사용한다.
Data Lifecycle
- Hot : 가장 최근 데이터로 매우 빠른 검색속도와 높은 성능을 보장해야 함. (디스크 혹은 메모리에 저장)
- Warm : 덜 자주 액세스되는 데이터로 성능은 더 낮아도 되나 여전히 검색 가능해야 함
- Cool : 더 오래된 데이터로 검색 속도와 성능에 요구사항이 낮음
Index Template
- 설정이 동일한 Index들을 만들기 위한 템플릿
- Template을 생성한 뒤에 인덱싱이 되는 데이터들에 대해 해당 템플릿 설정이 적용
* 예시
PUT _index_template/my-template
{
"index_patterns" : ["my-index_*"],
"priority": 1,
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
},
"mappings": {
"properties": {
"name": {"type": "text"},
"age": {"type": "short"}
}
}
Shard
: 인덱스에 '색인'되는 공간이며, 하나의 인덱스는 반드시 하나 이상의 샤드를 가짐
- Primary : 문서가 저장되는 원본 샤드이며 색인과 검색 성능에 모두 영향을 준다.
- Replica : Primary 샤드의 복제 샤드이며 검색 성능에 영향을 준다.
(Primary 샤드가 문제 생길 경우 Replica 샤드가 Primary 샤드로 승격)
예시)
해당 인덱스의 프라이머리 샤드 개수는 3개이며 각 프라이머리 샤드 당 복제본 개수는 1개이다.
이렇게 될 경우 Primary 샤드가 3개 만들어지며 그에 대한 레플리카 샤드 또한 3개가 만들어진다.
PUT /test-index/_settings
{
"index": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
Mapping
: 문서의 구조를 나타내는 정보
1) Dynamic Mapping : 처음 색인되는 문서를 바탕으로 매핑 정보를 바탕으로 ES가 동적으로 생성
2) Static Mapping : 문서의 매핑 정보를 미리 정의
Mapping Type
1) text : 전문 검색(Full Text search)를 위한 토큰 생성
2) keyword : 정확한 매칭을 위한 토큰 생성
'Database' 카테고리의 다른 글
[DOIK 스터디 2기] Kafka 개념 및 Kafka 생태계 개념 정리 (0) | 2023.11.18 |
---|---|
[DOIK 스터디 2기] Percona Operator for MongoDB 개념 및 실습 (3) | 2023.11.12 |
[DOIK 스터디 2기] CloudNativePG (PostgreSQL 오퍼레이터) 알아보기 및 간단한 실습 (2) | 2023.11.03 |
[DOIK 스터디 2기] MySQL Operator on Kubernetes를 이해하기 위한 MySQL, InnoDB Cluster 개념과 MySQL Operator 구조 (1) | 2023.10.28 |
[DOIK 스터디 2기] Kubernetes Operator 개념과 Database 관련 Operator 얕게 알아보기 (1) | 2023.10.20 |