Elasticsearch 란?

Elasticsearch 란?

Apache Lucene 기반의 java 오픈소스 분산 검색 엔진입니다. 방대한 양의 데이터를 거의 실시간으로 저장, 검색, 분석을 할 수 있습니다. 기존 RDB에서 다루기 힘든 full text search 기능을 제공합니다.

Elasticsearch 기본 개념

RDBMS Elasticsearch
schema mapping
database index
table type
row document
column field

Document

RDBMS의 row와 비슷한 개념이다. Document는 Json 객체이며, 다양한 필드를 포함하고 있다.

Field

RDBMS의 column으로 Document에 들어가는 데이터를 의미한다.

Type

여러개의 document가 모여 하나의 type을 이룬다. RDBMS의 table과 유사한 개념이다.

Index

데이터가 검색될 수 있는 구조로 변경하기 위해 문서를 검색어 토큰들로 변환 하여 저장한 것. RDBMS의 Database의 역할을 한다.
RDBM에서는 동시에 여러 database를 조회할 수 없지만 Elasticsearch에서는 index가 shard라는 단위로 분산되어 저장되기에 가능하다. 또한 index 파일들은 불변이기에 데이터 수정시에는 해당 데이터를 삭제 후에 insert해야한다. 이러한 특징으로 인해 수정이 잦은 문서를 저장하는 것은 비효율적이다.

Shard

Index가 분산되어 처리되는 단위를 뜻한다. 각 shard는 물리적인 노드들에 나뉘어서 저장된다. Shard는 두 종류로 나뉜다.

  • Primary shard : 모든 Document(database)는 하나의 primary shard에 저장된다. Primary shard의 기본 개수는 5개다.
  • Replica shard : Primary shard의 복제본으로 원본 데이터가 default되는경우 사용된다. 기본 개수는 1개이다.

Mapping

Index에 들어가는 데이터의 type을 정의하는 것이다.

Elasticsearch 특징

Full text search 엔진

Elasticsearch는 forward index가 아닌 inverted index 구조를 사용하여 데이터를 저장한다. forward는 document를 key로 특정 문자열을 value로 저장하는 방식이면 inverted index는 특정 문자열을 key로 document를 value로 저장해 문자열로 document를 조회하는데 빠른 성능을 보여줍니다.

RESTFul API

모든 CRUD는 HTTP 프로토콜을 통해 REST API로 처리한다.

실시간 분석

실시간에 가까운 속도로 인덱싱된 데이터의 검색, 집계가 가능하다.

'DB' 카테고리의 다른 글

Elasticsearch 테스트  (0) 2024.01.10
Elasticsearch Spring Boot에 적용해보기  (1) 2024.01.10
[MySQL] SELECT 문  (0) 2024.01.05
[MySQL] 계정 생성 및 권한 부여  (0) 2024.01.05
[MySQL] MySQL 데이터 형식  (1) 2024.01.04