본문 바로가기

백엔드

Elastic Search#1

반응형

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

 

출처 : https://github.com/exo-archives/exo-es-search

 

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 

 

 

반응형