본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~)/데이터베이스

1일1개 (13) - Elastic Search

by poetDeveloper 2024. 8. 21.
반응형

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#13. Elastic Search

Elastic Search를 들어본적 있는가 ? 일단 이름부터 뭔가 멋지다. 엘라스틱 서치는 이름에서부터 유추가 가능한데, "서치" 즉 검색 엔진이다. "오픈소스 검색엔진"인 것이 특징이고, 참고로 지난번 7번째 포스팅 포스트그레스큐엘도 오픈소스였다. 편의상 "엘.서" 라고 부르겠다. 엘서는 특히 대규모 데이터에서 검색이 빠르게 설계되었다. 주요 특징을 살펴보자.

 

특징

  1. 분산 아키텍처 & 우수한 검색기능 : 엘서는 분산 시스템으로 설계되어, 데이터를 여러 노드에 걸쳐 저장하고 검색할 수 있다. 이 덕분에 대규모 데이터 처리와 검색 성능이 매우 우수하다. 검색에선 풀 텍스트 검색, 구문 검색, 다중 필드 검색, 정렬 및 필터링 등 다양한 검색 쿼리를 지원한다.
  2. 실시간 검색 및 분석 : 데이터를 거의 실시간으로(딜레이 1초쯤, 저장과정 등 때문) 검색할 수 있으며, 수집된 데이터를 즉시 분석하여 인사이트를 도출할 수 있다.
  3. 확장성 : 데이터의 증가에 따라 시스템을 쉽게 확장할 수 있다. 노드를 추가하면 클러스터 크기를 확장하여 더 많은 데이터를 처리할 수 있다.
  4. 다양한 데이터 유형 : 지난번 포스트그레스큐엘처럼 정형/비정형 둘 다 처리할 수 있다.
  5. Kibana와 통합 : 키바나라는 시각화 도구와 통합해서 데이터를 시각적으로 분석하고 대시보드를 만들 수 있다.

엘라스틱 서치+키바나 출처 : https://www.elastic.co/kr/kibana

 

1. 역색인 (Inverted Index)

이름부터 멋진 이건 뭘까.... 엘서는 역색인 구조를 사용하는데, 이는 도서관 색인처럼 특정 단어가 어떤 문서에 있는지 빠르게 찾을 수 있게 해준다. dog, cat 두개의 단어가 포함된 문서를 찾고싶으면 엘서는 각 단어에 대한 리스트를 미리 생성해두고, 이 리스트에서 해당 단어가 포함된 문서 ID를 즉시 찾아낸다.

 

뭔소리인지 아래 예시를 보자 !!!

  • 문서 1 : "The cat in the hat."
  • 문서 2 : "The quick brown fox."
  • 문서 3 : "The cat chased the mouse."
단어 포함된 문서
the 문서 1, 문서 2, 문서 3
cat 문서 1, 문서 3
in 문서 1
hat 문서 1
quick 문서 2
brown 문서 2
fox 문서 2
chased 문서 3
mouse 문서 3

 이런식으로 정리를 해두면 cat, dog가 포함된 문서를 빠르게 찾을 수 있다.

2. 샤드 - 분산 검색 & 분산 처리

엘서는 데이터를 여러 샤드(Shard)에 나누어 저장한다. 여기서 "샤드"는 엘서에서 데이터를 나누어 저장하는 물리적 단위이다. 엘서의 인덱스는 여러 샤드로 분할되어 저장되고, 각 샤드는 서로 다른 노드에 분산되어 있다.

예를 들어보자. 만약 내가 10억 개의 문서를 인덱스해야 한다. 그니까 검색 대상이 10억개인건데, 이걸 1개의 서버에 모두 저장하고 검색하는 건 당연히 너무 어렵고 비효율적이다. 그래서 엘서는 예를들어 인덱스를 5개의 샤드로 분할한다. 그럼 각 샤드가 2억개의 문서를 포함하게 되고, 각각 다른 서버(노드)에 저장된다. 이때 검색요청이 들어오면 5개의 샤드가 동시에 쿼리를 처리해서 결과를 반환한다. = 검색 시간 크게 단축시킴

 

샤드의 역할

  • 수평 확장 : 데이터를 여러 샤드로 나누면 이를 각각의 노드에 분산시킬 수 있다. 나중에 노드가 추가될 때 샤드도 자동으로 재분배돼서 시스템의 성능과 저장 용량을 확장할 수 있다.
  • 병렬 처리 : 각 샤드는 독립적으로 검색 요청을 처리할 수 있기 때문에 검색 요청이 들어오면 여러 샤드가 병렬로 작업을 수행하여 속도가 빨라집니다.
  • 데이터 복제 & 안정성 : 샤드는 복제본을 가질 수 있다. 이 복제본을 레플리카 샤드라고 부른다. 이는 데이터의 가용성과 안정성을 높여주며, 하나의 노드가 장애를 일으켜도 다른 노드에서 복제본을 통해 데이터를 제공할 수 있다.

3. 고급 캐싱

  • 엘서는 검색 쿼리 결과를 메모리에 캐싱해서 반복적인 쿼리에 대해 매우 빠른 응답을 제공한다.
  • 자주 조회되는 데이터에 대해서 Lucene(루씬, 검색 라이브러리)이 자체적으로 메모리에 데이터를 로드하여 디스크 I/O를 줄이는 방식으로 성능을 향상시킨다.

4. Doc Values : 열 중심 저장

  • 엘서는 텍스트 기반 말고도 숫자, 날짜 등의 필드에 대해서도 빠른 정렬과 집계 작업을 지원한다.
  • 이러한 기능은 Doc Values라는 데이터 구조를 사용해 구현된다. Doc Values는 데이터를 열 중심으로 저장해서 메모리로 효율적으로 로드할 수 있게 한다.

Doc Values는 데이터를 행이 아닌 열(column) 중심으로 저장한다. 보통 DB는 데이터를 행 단위로 저장한다. 근데 엘서는 데이터를 열 단위로 저장해서 특정 필드에 대한 접근이 매우 빠르게 이루어질 수 있게 한다. / 예를 들어, 100만 개의 문서가 있고 각 문서에 price라는 필드가 있다고 하자. Doc Values는 이 price 필드의 값을 별도의 열로 저장한다. 이렇게 되면 특정 문서의 price 값을 빠르게 조회하거나, 모든 문서의 price 값을 정렬하거나 집계할 때 훨씬 효율적으로 처리할 수 있다. 

Document ID Title Price Category
1 "Book A" 1000 "Books"
2 "Laptop B" 10000 "Electronics"
3 "Pen C" 20000 "Stationery"
... ... ... ...
1000000 "Phone Z" 60000 "Electronics"

만약 이런식으로 있다고 치자. 만약 각 항목별로 Price만 보고싶다면?? RDB처럼 행 중심 저장 방식에서는 특정 필드를 조회할 때 다른 필드의 데이터도 함께 읽히기 때문에 불필요한 데이터가 로드될 수 있었다. 이는 당연히 데이터 양이 많아질수록 성능에 큰 영향을 미친다.

그러나, 열 중심 저장 방식에서는 필요한 필드만을 독립적으로 저장하고, 그 필드만을 읽어오므로 대규모 데이터라고 해도 성능이 우수하다. 

5. 비동기식 검색

  • 엘서는 비동기식으로 동작하여 검색 요청을 병렬로 처리하고, 다른 요청들이 서로 영향을 주지 않도록 한다. 이로인해 동시에 다수의 검색 요청 처리 가능하다.

 

반응형

'1일 1개념정리 (24년 8월~) > 데이터베이스' 카테고리의 다른 글

1일1개 (30) - Redis  (0) 2024.09.09
1일1개 (26) - 몽고DB  (0) 2024.09.05
1일1개 (23) - 정규화  (0) 2024.09.01
1일1개 (7) - 코끼리DB  (0) 2024.08.15
1일1개 (6) - Index (B+ Tree, Hash Table)  (2) 2024.08.14