샤드의 데이터들을 가지고 있는 물리적인 파일을 의미
하나의 인덱스는 다수의 샤드로 구성되고 하나의 샤드는 다수의 세그먼트로 구성
인덱스에 저장되는 문서는 해시 알고리즘
에 의해서 샤드들에 분산 저장되고 이 문서들은 셀제로는 세그먼트라는 물리적 파일에 저장
된다.
하지만 문서가 처음부터 세그먼트에 저장되는 것은 아니다. 색인된 문서는 먼저 세스템의 메모리 버퍼 캐시에 저장되는데 이 단계에서는 해당 문서가 검색되질 않는다.
이후 Elasticsearch의 refresh
라는 과정을 거쳐야 디스크에 세그먼트 단위로 문서가 저장되고 해당 문서의 검색이 가능해 진다.
세그먼트는 불면(Immutable)의 특징
을 갖는다. 즉, 기존에 기록한 데이터를 업데이트 하지 않는다는 뜻이다.
여기서 말하는 updated는 우리가 일반적으로 알고 있는 기존 데이터를 변경하는 과정이 아니다.
데이터를 업데이트하려고 시도하면 Elasticsearch는 새로운 세그먼트에 업데이트할 문서의 내용을 새롭게 쓰고, 기존의 데이터는 더 이상 쓰지 못하게 불용
처리한다.
이러한 동작은 update뿐 아니라 delete도 마찬가지다. 사용자가 문서를 삭제하기 위해 delete를 시도하면 바로 지우지 않고 불용 처리만 한다.
이 특성으로 인해 데이터의 일관성을 유지
할 수 있다.
하지만 이렇게 세그먼트 단위로 파일을 생성해서 문서를 저장할 때, 불변의 특성을 유지하기 위해 여러 개의 세그먼트로 사용자의 문서를 색인하게 되는데
시간이 지남에 따라 작은 크기의 세그먼트가 점점 늘어나고, 사용자가 문서를 검색할 때마다 많은 수의 세그먼트들이 응답해야 한다.
이러한 단점을 보완하기 위해 Elasticsearch는 백그라운드에서 세그먼트 병합(Merging)
을 진행한다.