ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Elasticsearch(with lucene) DocValue 에 대해서 알아보자
    elasticsearch 2021. 2. 27. 14:09
    반응형

    루씬은 검색을 효율적으로 하기위해 역색인 구조로 저장하는데 검색 시에는 유리한 구조이지만 정렬, 집계일 경우에는 그렇지 않다 그래서 그것을 보안하기 위해 DocValues란 구조를 사용한다

    루씬은 4.0부터 컬럼 기반인 DocValues라는 개념을 도입했다

    DocValues는 메모리를 효율적으로 사용하기 위해 jvm heap 메모리가 아닌 운영체제 os의 파일 시스템 캐시를 사용해 색인 시 디스크를, 검색시 시스템 캐시를 이용하는 디스크 기반 데이터 구조이다

    즉 컬럼 기반의 구조를 채택해 힙 메모리 사용에 영향을 주지 않으며 힙 메모리를 사용하는 것과 같은 성능을 낸다

     

     

     

     

    참고로 엘라스틱서치에서는 JVM 힙 메모리를 fielddata(uninverted)라고 부르는 특별한 구조로 사용 한다. 또한 JVM의 힙 메모리 자원의 소모가 많기 때문에 기본값으로 비활성화돼 있다

     

     

    DocValues느 세그먼트 단위로 생성되며 검색시 사용되는 역색인과 마찬가지로 불변이다

    장점은 아래와 같다

    • 힙 메모리 사용량 감소 및 가비지 컬렉션 Garbage Collection 속도 향상
    • 대용량 세그먼트를 메모리로 다시 로드하는 데 발생하는 지연 시간 단축

    이럴 때도 사용하면 유용하다

    • 제한된 하드웨어
      • 필드 데이터 구조가 메모리 리소스의 많은 공간을 차지하거나, 노드에 메모리를 더 이상 확장할 수 없는 경우에 DocValues는 유용하다. 메모리의 대부분을 디스크로 옮긴 DocValues를 사용하면 적은 양의 메모리만으로 프로세스를 시작할 수 있다. 이뿐만 아니라 OS가 파일 시스템 캐시를 사용해 메모리 부족 문제를 방지하고 가비지 컬렉션으로 인한 문제 발생도 훨씬 적다.
    • 일일 작업(OLAP)
      • 일부 사용자는 특정 시간에 데이터를 집계하는 쿼리를 매일 실행한다. 이 경우 가장 중요한 것은 쿼리 대기 시간이나 처리량이 아니라, 일일 작업을 수행하는 동안 클러스터에 영향을 최소화하는 것이다. DocValues은 나중에 다시 사용되지 않는 데이터 구조를 채택해 메모리를 채우지 않는다. 따라서 일일 작업을 처리하기에 적합하다.

     

    text와 annotated_text 타입을 제외하고는 doc_values의 기본 값은 true로 자동 셋팅 되며

    정렬이나 집계 스크립트에 사용되지 않을 것 같은 필드는 false로 해 디스크 공간을 덜 사용하도록 할 수 있다

     

    컬럼 기반 타입이 왜 집계나 정렬 등등에 더 유리한지는 다음에 글을 작성할 예정이다

     

    참고

    https://www.elastic.co/guide/en/elasticsearch/reference/current/doc-values.html

    https://drscg.tistory.com/615

    실전비급 아파치 루신 103 페이지

    반응형

    댓글

Designed by Tistory.