Elasticsearch Segment

JunMyung Lee·2023년 6월 26일
0

Elasticsearch

목록 보기
20/41

Segment

샤드의 데이터들을 가지고 있는 물리적인 파일을 의미

인덱스와 샤드, 세그먼트의 관계

하나의 인덱스는 다수의 샤드로 구성되고 하나의 샤드는 다수의 세그먼트로 구성

데이터 변경시

인덱스에 저장되는 문서는 해시 알고리즘에 의해서 샤드들에 분산 저장되고 이 문서들은 셀제로는 세그먼트라는 물리적 파일에 저장된다.
하지만 문서가 처음부터 세그먼트에 저장되는 것은 아니다. 색인된 문서는 먼저 세스템의 메모리 버퍼 캐시에 저장되는데 이 단계에서는 해당 문서가 검색되질 않는다.
이후 Elasticsearch의 refresh라는 과정을 거쳐야 디스크에 세그먼트 단위로 문서가 저장되고 해당 문서의 검색이 가능해 진다.

세그먼트는 불면(Immutable)의 특징을 갖는다. 즉, 기존에 기록한 데이터를 업데이트 하지 않는다는 뜻이다.

문서 색인 이후 업데이트

여기서 말하는 updated는 우리가 일반적으로 알고 있는 기존 데이터를 변경하는 과정이 아니다.
데이터를 업데이트하려고 시도하면 Elasticsearch는 새로운 세그먼트에 업데이트할 문서의 내용을 새롭게 쓰고, 기존의 데이터는 더 이상 쓰지 못하게 불용 처리한다.
이러한 동작은 update뿐 아니라 delete도 마찬가지다. 사용자가 문서를 삭제하기 위해 delete를 시도하면 바로 지우지 않고 불용 처리만 한다.
이 특성으로 인해 데이터의 일관성을 유지할 수 있다.

하지만 이렇게 세그먼트 단위로 파일을 생성해서 문서를 저장할 때, 불변의 특성을 유지하기 위해 여러 개의 세그먼트로 사용자의 문서를 색인하게 되는데
시간이 지남에 따라 작은 크기의 세그먼트가 점점 늘어나고, 사용자가 문서를 검색할 때마다 많은 수의 세그먼트들이 응답해야 한다.

이러한 단점을 보완하기 위해 Elasticsearch는 백그라운드에서 세그먼트 병합(Merging)을 진행한다.

profile
11년차 검색개발자 입니다. 여러 지식과 함께 실제 서비스를 운영 하면서 발생한 이슈에 대해서 정리하고 공유하고자 합니다.

0개의 댓글