-
세그먼트의 불변성 - 장점elasticsearch 2021. 2. 12. 12:55반응형
세그먼트의 불변성으로 인해 많은 장점을 가져갈 수 있다
1. 불변이기 때문에 동시성을 신경 쓸 필요가 없다 스레드가 데이터를 점유한 상황일 때를 신경 쓸 필요가 없는 것이다 수정이 가능하다면 수정하는 동안 다른 스레드는 접근 불가능하게 한다거나 해서 퍼포먼스가 떨어질 수 있다
2. 엘라스틱 서치는 하나의 필드에 또 여러 개의 필드를 만들어서 사용한다 그런데 수정이 가능하다면 그 수많은 필드의 수많은 Terms를 찾아서 수정해줘야 한다 그리고 그걸 수정하는 동안 해당 데이터가 검색이 안될 수 있다 그래서 불변으로 해서 새로운 세그먼트를 추가해서 기존 데이터는 삭제 비트에 마크만 해주고 나중에 병합으로 백그라운드 스레드에서 처리해서 *리소스도 절감하고 검색도 빠르게 제공할 수 있다
3. 시스템 캐시를 적극 적으로 활용할 수 있는데 그 이유는 불변이기 때문에 일정 기간 동안 유지가 가능하다 수정이 가능하다면 해당 메모리에서 해당 세그먼트 파일을 읽어와 복사하고 해당 데이터를 찾아 수정하고 다시 메모리에 올려야 한다 수정되는 색인 몇천건이 요청이 왔는데 몇천건이 여러개의 세그먼트에 들어있고 그것이 레프레시가 발생할 때 마다 세그먼트를 메모리에서 내렸다 올리고 한다면 그러면 자원 낭비가 심하게 발생하게 되고 ttl도 적어져 히트율까지 나빠진다 그러므로 세그먼트 파일을 읽어와 삭제 마크만 해주고 버퍼에 있는 데이터를 새로운 세그먼트를 추가하면 되므로 캐시를 적극적으로 사용할 수 있으며 캐시의 수명이 길어지니 히트 율도 높아진다
리소스를 절감할 수 있다는 말은 하나의 in-memory-buffer 요청 색인을 쌓아두고 리프레쉬가 1초에 한번 발생하는데 삭제, 수정되는 데이터보다는 백그라운드에서 merge가 주기적으로 기본 5초이기 때문에 한꺼번에 처리할 수 있는 데이터가 더 많고 시스템 리소스(CPU, 메모리, 디스크) 발생 횟수도 줄어들게 되어 리소스 절감을 할 수 있다
사실 위에 1,2,3 나열해 둿지만 결국 다 관련된 내용들이다.
참고
엘라스틱 서치 실무가이드
반응형'elasticsearch' 카테고리의 다른 글
elasticsearch function_score (0) 2021.02.22 elasticseaarch eager global ordinal를 사용해 퍼포먼스를 올려보자 (0) 2021.02.20 elasticsearch similarity module 이용해서 score 수정하기 (0) 2021.02.15 elasticsearch(with lucene) field_data에 대해서 알아보자 (0) 2021.02.09 elasticsearch aggregation(aggs) paging 하기 (0) 2020.05.07