1. Elastic Search란?
오픈소스 분산 검색 엔진으로, 방대한 양의 데이터를 신속하게, 거의 실시간(NRT, Near Real Time)으로 저장, 검색, 분석할 수 있다.
-> 검색을 위해 단독으로 사용되기도 하며 ELK(Elastic Search, Logstatsh / Kibana) 스택으로 사용되기도 함
- Logstash: 다양한 소스(DB, csv파일 등)의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 elastic search로 전달
- Elastic Search: Logstatsh로부터 받은 데이터를 검색 및 집계하여 필요한 관심 있는 정보를 획득
- Kibana: Elastic Search의 빠른 검색을 통해 데이터를 시각화 및 모니터링
2. Elastic Search와 관계형 DB 비교
| Relational Database | Elastic Search |
Database -> Index
Table -> Type
Row -> Document
Column -> Field
Index -> Analyze
Primary key -> _id
Schema -> Mapping
Physical partition - > Shard
Logical partition -> Route
Relational -> Parent/Child, Nested
SQL -> Query DSL
1) 클러스터(cluster)
Elastic Search에서 가장 큰 시스템 단위를 의미하며, 최소 하나 이상의 노드로 이루어진 노드들의 집합.
서로 다른 클러스터는 데이터의 접근, 교환을 할 수 없는 독립적인 시스템으로 유지되며
여러 대의 서버가 하나의 클러스터를 구성할 수 있고, 한 서버에 여러 개의 클러스터가 존재할 수 있습니다.
2) 노드(node)
Elastic Search를 구성하는 하나의 단위 프로세스.
역할에 따라 Master-eligible, Data, Ingest, Tribe 노드로 구분 가능.
> master-eligible node
: 클러스터를 제어하는 마스터로 선택할 수 있는 노드
: 인덱스 생성, 삭제 / 클러스터 노드들의 추적, 관리 / 데이터 입력 시 어느 샤드에 할당할 것인지
> Data node
: 데이터와 관련된 CRUD 작업과 관련 있는 노드
> Ingest node
: 데이터를 변환하는 등 사전 처리 파이프라인을 실행하는 역할
> Coordination Only node
: data node와 master-eligible node의 일을 대신하는 이 노드는 대규모 클러스터에서 큰 이점이 있음. 로드밸런서와 비슷한 역할
3) 인덱스 / 샤드 / 복제
index = database
shard, replica는 분산 DBMS에도 존재
Sharding: 데이터를 분산해서 저장하는 방식. Elastic Search에서는 scale out을 위해 index를 여러 shard로 쪼갠 것
-> 기본적으로 1개 존재. 검색 성능 향상을 위해 클러스터의 샤드 갯수를 조정하는 튜닝을 하기도 함
Replica: 또 다른 형태의 shard. 노드를 손실했을 경우 데이터의 신뢰성을 위해 샤드들을 복제하는 것.
때문에 replica는 서로 다른 노드에 존재할 것을 권장.
4) Elastic Search 특징
- Scale out: 샤드를 통해 규모가 수평적으로 늘어날 수 있음
- 고가용성: Replica를 통해 데이터의 안정성 보장
- Schema Free: Json 문서를 통해 데이터 검색을 수행하므로 스키마 개념이 없음
- Restful: 데이터 CRUD 작업은 HTTP Restful API를 통해 수행하며 다음과 같이 대응함
Data CRUD | Elastic Search Restful |
select | get |
insert | put |
update | post |
delete | delete |
POST 예제
$ curl -XPOST 'localhost:5000/blogdb/blog/1?pretty' -d '{"postName" : "elasticsearch", "category" : "IT"}' -H 'Content-Type: application/json'
- d : json 포맷 전달 데이터
- H: 헤더. json 전달 위해선 application/json 사용
- ?pretty: 결과를 예쁘게 보여주도록 요청
-> blogdb 인덱스에 blog 타입으로 id값이 1인 document 저장
GET 예제
$ curl -XGET 'localhost:5000/blogdb/blog/1?pretty'
출처: https://victorydntmd.tistory.com/308?category=742451
'백엔드' 카테고리의 다른 글
Elastic Search#2 (0) | 2021.05.31 |
---|---|
[macOS]Elastic Search 설치(brew) (0) | 2021.05.30 |
구글 로그인 api 준비단계 (0) | 2021.03.04 |
intellij 연동하여 ec2서버 소스 수정하기 (0) | 2021.02.16 |
[AWS ec2]RDS구축 및 Intellij를 통해 연동 (0) | 2021.02.14 |