elasticsearch에는 warmer api가 있다. 1.4.0 beta1 부터 만들어진 기능이다.
https://www.elastic.co/guide/en/elasticsearch/reference/1.4/indices-warmers.html
elasticsearch가 java 애플리케이션이라 데이터를 메모리에 로딩해야 속도가 빠르기 때문에,
warming up 또는 preload를 통해서 파일 또는 세그먼트 데이터를 메모리에 올려 놓는 것을 의미한다.
특히 큰 데이터의 경우는 반드시 warming up을 시켜야 한다. 그래서 API로 보면, 색인/템플릿 메모리 로딩 또는 특정 색인 검색시를 위한 메모리 로딩을 지시한다.
워밍업도 GET/PUT/DELETE 기능이 있다.
PUT _warmer/{warmer_name}
PUT /{index}/_warmer/{warmer_name}
PUT /{index}/{type}/_warmer/{warmer_name}
DELETE /{index}/_warmer/{name}
GET {index}/_warmer/{warmer_name}
elasticsearch 2.0 소스를 간단히 살펴보았다. 생각한 것과 비슷하게 메모리 로딩이다.
예를 들어, SearchService클래스 초기화시 indicesWarmer에 listener에 NormsWarmer, FieldDataWarmer, SearchWamer 클래스를 추가한다. 그리고 내부적으로 index.warmer.enabled 이 true이면 listener를 작동하도록 코드화 되어 있다.
this.indicesWarmer.addListener(new NormsWarmer());
this.indicesWarmer.addListener(new FieldDataWarmer());
this.indicesWarmer.addListener(new SearchWarmer());
FileldDataWamer의 경우, 메모리로 색인의 필드 매핑 정보를 로드한다.
warmUp.put(indexName, fieldMapper.fieldType());
for (final MappedFieldType fieldType : warmUp.values()) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
final long start = System.nanoTime();
indexFieldDataService.getForField(fieldType).load(ctx);
...
}
그리고 ShardIndexWarmerService 는 warm관련 간단한 통계 지표를 쌓는다.
'Elasticsearch' 카테고리의 다른 글
[elasticsearch] prefix filter 사용하기 (0) | 2015.11.19 |
---|---|
elasticsearch full gc 이후의 hang 해결 (0) | 2015.11.11 |
[elasticsearch] search시 size 매개변수 (0) | 2015.11.02 |
[elasticsearch] 2.0 출시 - 2015.10.28 (0) | 2015.11.02 |
[elasticsearch] query_string으로 질의시 유의할 사항 (0) | 2015.10.26 |