엘라스틱서치의 기본 동작
엘라스틱서치는 분산형 RESTful 검색 및 분석 엔진으로, 다양한 데이터를 실시간으로 검색하고 분석할 수 있다. 엘라스틱서치의 기본 동작은 주로 REST API를 통해 이루어지며, 문서의 생성, 조회, 업데이트 및 삭제 등의 작업이 포함된다. 이 작업들은 Kibana와 같은 도구를 통해 쉽게 수행할 수 있다.
문서 색인
- .id를 지정하여 색인: 엘라스틱서치에서 문서를 색인할 때 명시적으로 _id 값을 지정할 수 있다. 이 경우, 지정한 _id 값을 가진 문서가 색인된다.
- .id를 지정하지 않고 색인: _id 값을 지정하지 않으면 엘라스틱서치가 자동으로 _id 값을 생성한다.
문서 조회
문서를 조회할 때는 인덱스 이름과 _id 값을 지정하여 GET 메서드를 호출한다. 이를 통해 색인된 문서를 검색할 수 있다.
문서 업데이트
문서를 업데이트할 때는 인덱스 이름과 _id 값을 지정한 후, 문서 내용의 일부를 doc 필드 안에 지정한다. 기존 문서를 업데이트하기 위해서는 _update 엔드포인트를 사용한다.
문서 검색
엘라스틱서치는 다양한 검색 쿼리를 지원하며, 검색을 위해서는 인덱스 이름을 지정하고, _search 엔드포인트를 사용하여 쿼리 DSL을 통해 요청을 보낸다.
문서 삭제
문서를 삭제할 때는 인덱스 이름과 _id 값을 지정하여 DELETE 메서드를 호출한다.
엘라스틱서치 구조 개괄
용어설명
문서 (document) | 엘라스틱서치가 저장하고 색인하는 JSON 문서. 각 문서는 인덱스 내에서 고유한 _id 값을 가짐. |
인덱스 (index) | 문서를 모아 놓은 단위로, 데이터베이스의 테이블에 해당. 클라이언트는 인덱스를 통해 문서를 검색함. |
샤드 (shard) | 인덱스를 여러 개의 샤드로 분리하여 분산 저장. 각 인덱스는 여러 개의 프라이머리 샤드와 복제본 샤드로 구성됨. |
노드 (node) | 엘라스틱서치 클러스터의 구성 요소로, 각 노드는 하나 이상의 샤드를 보유. 데이터의 저장, 검색 요청 처리 등을 담당. |
클러스터 (cluster) | 여러 대의 노드가 모여 하나의 클러스터를 형성. 인덱스를 여러 노드에 분산 저장하여 확장성과 안정성을 제공. |
타입 (type) | 한 인덱스 내에서 여러 논리적인 분류를 가능하게 하는 요소였으나, 현재는 사용되지 않음. |
엘라스틱서치 내부 구조와 루씬
루씬
엘라스틱서치는 아파치 루씬이라는 오픈 소스 라이브러리를 사용한다. 루씬은 문서를 색인하고 검색하는 라이브러리다. 엘라스틱서치는 이러한 루씬의 동작 특성을 활용하여 내부 구조를 형성하고 있다.
루씬 flush
문서 색인 후 일정 Duration 동안 메모리에 저장된 문서를 디스크에 기록하는 작업을 flush라 한다. flush는 메모리에 있는 문서 데이터를 디스크에 기록하여 시스템 크래시가 발생해도 데이터를 잃지 않도록 한다.
루씬 commit
commit은 flush된 데이터를 디스크에 완전히 저장하고 이를 안전하게 만드는 작업이다. commit은 flush 후 특정 간격으로 이루어지며, 데이터를 영구적으로 저장한다.
세그먼트
세그먼트는 디스크에 저장된 루씬 인덱스의 물리적 단위다. 새로운 문서가 추가되면 새로운 세그먼트가 생성되고, 기존 문서들은 그대로 유지된다. 세그먼트는 읽기 전용으로, 변경되지 않는다.
루씬 인덱스와 엘라스틱서치 인덱스
여러 세그먼트가 모여 하나의 루씬 인덱스를 구성하고, 여러 루씬 인덱스가 모여 엘라스틱서치 인덱스를 구성한다. 엘라스틱서치 인덱스는 여러 샤드로 분산되어 저장된다.
translog
translog는 엘라스틱서치에서 문서의 색인 작업을 기록하는 로그다. translog는 flush 전에 이루어진 변경 사항을 기록하며, 시스템 크래시 발생 시 복구에 사용된다.
참고 자료
엘라스틱서치 바이블 - 예스24
이 책은 단순한 엘라스틱서치 기능 소개와 사용법에 대한 학습을 넘어 엘라스틱서치의 구조를 깊이 파헤친다. 엘라스틱서치를 뜯어보며 동작 원리와 구조에 대한 근본적인 이해도를 높이고 싶
m.yes24.com
엘라스틱서치의 기본 동작
엘라스틱서치는 분산형 RESTful 검색 및 분석 엔진으로, 다양한 데이터를 실시간으로 검색하고 분석할 수 있다. 엘라스틱서치의 기본 동작은 주로 REST API를 통해 이루어지며, 문서의 생성, 조회, 업데이트 및 삭제 등의 작업이 포함된다. 이 작업들은 Kibana와 같은 도구를 통해 쉽게 수행할 수 있다.
문서 색인
- .id를 지정하여 색인: 엘라스틱서치에서 문서를 색인할 때 명시적으로 _id 값을 지정할 수 있다. 이 경우, 지정한 _id 값을 가진 문서가 색인된다.
- .id를 지정하지 않고 색인: _id 값을 지정하지 않으면 엘라스틱서치가 자동으로 _id 값을 생성한다.
문서 조회
문서를 조회할 때는 인덱스 이름과 _id 값을 지정하여 GET 메서드를 호출한다. 이를 통해 색인된 문서를 검색할 수 있다.
문서 업데이트
문서를 업데이트할 때는 인덱스 이름과 _id 값을 지정한 후, 문서 내용의 일부를 doc 필드 안에 지정한다. 기존 문서를 업데이트하기 위해서는 _update 엔드포인트를 사용한다.
문서 검색
엘라스틱서치는 다양한 검색 쿼리를 지원하며, 검색을 위해서는 인덱스 이름을 지정하고, _search 엔드포인트를 사용하여 쿼리 DSL을 통해 요청을 보낸다.
문서 삭제
문서를 삭제할 때는 인덱스 이름과 _id 값을 지정하여 DELETE 메서드를 호출한다.
엘라스틱서치 구조 개괄
용어설명
문서 (document) | 엘라스틱서치가 저장하고 색인하는 JSON 문서. 각 문서는 인덱스 내에서 고유한 _id 값을 가짐. |
인덱스 (index) | 문서를 모아 놓은 단위로, 데이터베이스의 테이블에 해당. 클라이언트는 인덱스를 통해 문서를 검색함. |
샤드 (shard) | 인덱스를 여러 개의 샤드로 분리하여 분산 저장. 각 인덱스는 여러 개의 프라이머리 샤드와 복제본 샤드로 구성됨. |
노드 (node) | 엘라스틱서치 클러스터의 구성 요소로, 각 노드는 하나 이상의 샤드를 보유. 데이터의 저장, 검색 요청 처리 등을 담당. |
클러스터 (cluster) | 여러 대의 노드가 모여 하나의 클러스터를 형성. 인덱스를 여러 노드에 분산 저장하여 확장성과 안정성을 제공. |
타입 (type) | 한 인덱스 내에서 여러 논리적인 분류를 가능하게 하는 요소였으나, 현재는 사용되지 않음. |
엘라스틱서치 내부 구조와 루씬
루씬
엘라스틱서치는 아파치 루씬이라는 오픈 소스 라이브러리를 사용한다. 루씬은 문서를 색인하고 검색하는 라이브러리다. 엘라스틱서치는 이러한 루씬의 동작 특성을 활용하여 내부 구조를 형성하고 있다.
루씬 flush
문서 색인 후 일정 Duration 동안 메모리에 저장된 문서를 디스크에 기록하는 작업을 flush라 한다. flush는 메모리에 있는 문서 데이터를 디스크에 기록하여 시스템 크래시가 발생해도 데이터를 잃지 않도록 한다.
루씬 commit
commit은 flush된 데이터를 디스크에 완전히 저장하고 이를 안전하게 만드는 작업이다. commit은 flush 후 특정 간격으로 이루어지며, 데이터를 영구적으로 저장한다.
세그먼트
세그먼트는 디스크에 저장된 루씬 인덱스의 물리적 단위다. 새로운 문서가 추가되면 새로운 세그먼트가 생성되고, 기존 문서들은 그대로 유지된다. 세그먼트는 읽기 전용으로, 변경되지 않는다.
루씬 인덱스와 엘라스틱서치 인덱스
여러 세그먼트가 모여 하나의 루씬 인덱스를 구성하고, 여러 루씬 인덱스가 모여 엘라스틱서치 인덱스를 구성한다. 엘라스틱서치 인덱스는 여러 샤드로 분산되어 저장된다.
translog
translog는 엘라스틱서치에서 문서의 색인 작업을 기록하는 로그다. translog는 flush 전에 이루어진 변경 사항을 기록하며, 시스템 크래시 발생 시 복구에 사용된다.
참고 자료
엘라스틱서치 바이블 - 예스24
이 책은 단순한 엘라스틱서치 기능 소개와 사용법에 대한 학습을 넘어 엘라스틱서치의 구조를 깊이 파헤친다. 엘라스틱서치를 뜯어보며 동작 원리와 구조에 대한 근본적인 이해도를 높이고 싶
m.yes24.com