Elasticsearch 데이터 처리
데이터 색인(Indexing)
출처 : https://esbook.kimjmin.net/
- 색인(Indexing) : 데이터가 검색될 수 있는 구조로 변경하기 위해 원본 문서를 검색어 토큰들로 변환해 저장하는 과정
- 인덱스(index, indices) : 색인 과정 거친 결과물&색인된 데이터가 저장되는 저장소
- Elasticsearch에서 도큐먼트들의 논리적인 집합을 표현하는 단위
- 단일 데이터 단위를 Document, Documnet를 모아 놓은 집합이 Index, indicies
- 검색(search) : 인덱스에 들어있는 검색어 토큰들을 포함하고 있는 문서를 찾아가는 과정
- 질의(query) : 사용자가 원하는 문서 찾거나 집계 결과 출력 위해 검색 시 입력하는 검색어 또는 검색 조건
REST API
- Elasticsearch는 클러스터와 상호 작용하는데 사용할 수 있는 강력한 REST API 제공
- API로 수행할 수 있는 작업들
- 클러스터, 노드 및 색인 상태, 상태 및 통계 확인
- 클러스터, 노드 및 색인 데이터 및 메타 데이터 관리
- CRUD(Create, Read, Update, Delete)&인덱스 대한 검색 작업 수행
- 페이징, 정렬, 필터링, 스크립팅, 집계 등 기타 여러 고급 검색 작업 실행
- Web의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처
- 구성 요소 3가지 : Resource, Method, Message
- 메서드 통해 리소스 호출하면, 내부적으로 접근 제어 따라 JSON 형태, url 주소 등 통해 확인O
동일한 결과 출력됨 : curl -XGET "http://localhost:9200/_cat/indices"
- 즉, Elasticsearch는 Web을 통해 정보 호출, 생성 등을 진행한다는 것을 알 수 있음
HTTP Method, CRUD, SQL 비교
| HTTP 메서드 |
CRUD |
SQL |
| GET |
Read |
Select |
| PUT |
Update |
Update |
| POST |
Create |
Insert |
| DELETE |
Delete |
Delete |
HTTP 메서드가 Elasticsearch에서 사용하는 방식
Elasticsearch 시스템 구조
클러스터 구성
여러 서버에 하나의 클러스터로 실행
- Elasticsearch 노드들은 클라이언트와 통신 위한 http 포트(9200~9299), 노드 간의 데이터 교환 위한 tcp 포트(9300~9399) 총 2개 네트워크 통신 열어두고 있음
- 일반적으로 1개 물리 서버마다 하나의 노드 실행하는 것 권장
▶ 예시 : 3개 다른 물리 서버에서 각 1개씩 노드 실행 시 클러스터 구성
출처 : https://esbook.kimjmin.net/
▶ 예시 : 하나의 물리 서버 안에서 여러 노드 실행
출처 : https://esbook.kimjmin.net/
- 각 노드들은 차례로 9200, 9201... 순으로 포트 사용
- 클라이언트는 9200, 9201 등 포트 통해 원하는 노드와 통신O
- 물리적 구성과 상관 없이 여러 노드가 하나의 클러스터로 묶이기 위해 클러스터명 'cluster.name' 설정이 묶여질 노드들 모두 동일해야 함
- 같은 서버/네트워크 내부에 있더라도 'cluster.name'이 동일X, 각 별개의 시스템으로 해석됨
하나의 서버에서 여러 클러스터 실행
참고 : https://esbook.kimjmin.net/03-cluster/3.1-cluster-settings
클러스터 상태(health)
GET /_cat/health?v
- 클러스터가 어떻게 진행되고 있는지 기본적인 확인O
- 클러스터 상태 확인 위해 _cat API 사용
- Health Color
- green : 모든 것이 괜찮음(클러스터 완전히 작동 중)
- yellow : 모든 데이터를 사용할 수 있으나, 일부 복제본은 아직 할당X(클러스터 완전히 작동 중)
- red : 어떤 이유로든 일부 데이터 사용X(클러스터 부분 작동 중)
데이터베이스가 가진 데이터 확인하기
GET /_cat/indices?v
출처
https://esbook.kimjmin.net/