Elasticsearch에는 forcemerge라는 기능이 있습니다. 이것이 엘라스틱 서치에 데이터 베이스 개념인 인덱스들은 설정한 수의 샤드로 구성이 되어있는데, 이 샤드는 또 이 세그먼트라는 것들로 구성되어있는 것입니다.
세그먼트의 수가 생기는 기준은 잘 모르겠지만 사용해서 성능향상을 볼 수 있는 시점은 더이상 해당 인덱스에 데이터가 들어가지 않을때에 실행을 하는 것이 좋습니다. 이유는 세그먼트는 수정이 되지 않아서 forcemerge를 하면 새로운 새그먼트를 생성하여 모두 합치기 때문에 부하가 꽤나 큰 작업이라는 설명입니다.
세그먼트를 합치면 얻을 수 있는 성능향상은 당연히 검색 속도 향상이라고 볼 수 있습니다. 많은 양의 세그먼트에서 데이터를 찾아야 하는 것을 하나에서 찾으면 되니까 속도가 향상되는 것입니다. 그리고 용량도 조금은 줄어들 것입니다.
파이썬의 Elasticsearch 라이브러리를 활용한 사용법은 다음과 같습니다.
from elasticsearch import Elasticsearch
ES = Elasticsearch(hosts="http://localhost:9200", timeout=60)
def set_max_num_segments(index_name, max_num_segments):
es_response = ES.indices.forcemerge(index=index_name, max_num_segments=max_num_segments)
return es_response
set_max_num_segments("index_name", 1)
curl을 활용한 사용법은 다음과 같습니다
curl -XPOST 'localhost:9200/my-index-000001/_forcemerge' -H 'Content-Type: application/json'
검색 속도가 너무 느리거나 로그성 데이터를 쌓을때에 이제 더이상 데이터를 쌓지 않는 인덱스에 사용하는 용도입니다.
'Elasticsearch > 개념' 카테고리의 다른 글
Elasticsearch - Rollover API (0) | 2021.04.20 |
---|---|
Elasticsearch에 대하여 (0) | 2021.04.19 |