ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • elasticsearch segments 1부
    elasticsearch 2021. 3. 20. 14:17
    반응형

    세그먼트란?

     

    루씬의 색인은 물리적 세그먼트로 구성되어 있으며 세그먼트를 간당히 정의하면 색인된 도큐먼트 모음이다

     

    세그먼트는 독특한 색인 구조가 성능과 직결되기 때문에 상당히 중요하므로 잘 살펴볼 필요가 있다

    세그먼트는 RAM과 DISK에 저장된다

    색인 안에는 수많은 세그먼트가 있고 세그먼트 안에는 수많은 도큐먼트가 있다

     

    lucene.apache.org/core/6_4_0/core/org/apache/lucene/codecs/lucene62/package-summary.html#package.description

     

    세그먼트의 구성

    하나의 세그먼트는 여러 개의 파일로 구성된다 세그먼트에는 도큐먼트 필드 뿐만아니라 효과적인 검색에 필요한 다양한 정보가 담겨있다

     

     

    위 그림은 세그먼트로 구성된 색인인데 팡일 이름에 공통적으로 붙는 접두사로 다른 세그먼트와 구분할 수 있다 여기서는 _0이 세그먼트 파일의 접두사이다

    세그먼트 정보가 변경되고 추가되는 문제를 버전별로 해결하고자 세그먼트 정보를 코덱으로 추상화하고 각 버전은 코덱을 상속해 정의했다 5 버전에서 변화가 있었고 7은 5에서 변경된 코덱을 사용하는데 5 이전 버전과는 호환되지 않는다

     

     

    세그먼트 병합

    세그먼트는 불변이기 때문에 도큐먼트 추가, 수정 사항이 생기면 세그먼트를 직접 수정하는 것이 아니라

    새로운 세그먼트를 만들고 수정 사항을 반영하고 기존 세그먼트를 삭제한다

    도큐먼트 삭제는 세그먼트가 불변이기 때문에 삭제 할 수 없어서 삭제할 도큐먼트를 별도로 기록하고 이를 읽지 않는 방식으로 처리한다 즉 삭제시 별도 표시만 하고 삭제하지 않는 다는 것이다

    그런데 세그먼트가 계속 추가되고 실제로 삭제되지 않는 도큐먼트가 쌓이면 용량과 조회되는 대상이 많아지므로 성능에 영향을 미친다 그래서 루씬은 이를 해결하고자 세그먼트를 정기적으로 병합해 세그먼트 수와 안에 있는 문서의 수를 줄인다(삭제된 것은 새로운 세그먼트에 옮겨지지 않으니)

     

    이런 과정을 통해서 위와 같이 세그먼트 크기가 커지게 되는데 작은 여러개의 세그먼트를 읽는 것 보다 하나의 세그먼트를 읽는 것이 빠르며 병합 과정에서 삭제될 파일이라고 표시해 놓은 것들은 새로운 세그먼트로 병합되지 않기 때문에 도큐먼트 개수도 줄어 들어 읽어질 도큐먼트가 적어진다 즉 디스크 용량이 줄어든다

    예를들면 15kb의 파일 하나를 읽는 것이 5kb 파일 3개를 읽는 것 보다 빠르다. 같은 용량이라면 IO가 한번 발생하는 것이 3번 발생하는 것 보다 낫기 때문이다

     

     

    위 내용은

    예전에 읽었던 실전 비급 아파치 루씬 요약 추가 내용을 덧 붙였습니다

     

    fdv.github.io/running-elasticsearch-fun-profit/003-about-lucene/003-about-lucene.html

    반응형

    댓글

Designed by Tistory.