본문 바로가기

Database

[ElasticSearch] 정리 #1 - 기본 개념

반응형

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 : 정확한 매칭을 위한 토큰 생성

반응형