본문 바로가기
카테고리 없음

엘라스틱서치 merge feat 아이작

by 흰색남자 2022. 11. 26.

엘라스틱서치는 루씬 검색 엔진을 사용해서 검색을 수행한다.

엘라스틱서치는 껍데기일 뿐이고, 코어가 루씬인 셈이다.

 

카프카, 하둡 등 분산 시스템에서는 주키퍼를 사용해서 저널링을 수행한다.

엘라스틱서치에서는 샤드에 존재하는 tranlog를 사용하여 저널링을 수행한다.

 

 

tranlog는 변경 기록을 관리하고, 장애 복구를 위한 백업 데이터 및 데이터 유실 방지의 역할을 수행한다.

 

엘라스틱서치에서 인덱스에 업데이트가 일어나면 다음과 각 샤드는 다음과 같은 2가지 프로세스를 거치게된다.

1. 인덱스 refresh

인덱스된 새로운 문서는 바로 검색할 수 없다. 첫 번째로,  문서들은 메모리에 버퍼에 초당 한번씩 쓰이게된다. 즉, 최대 1초가 지나야 검색이 가능하다.

refresh 프로세스는 인메모리 버퍼의 내용으로 부터 새로운 인메모리 세그먼트를 생성한 다음 버퍼를 비우게 된다.

1. 세그먼트는 불변이므로, 업데이트된 문서는 다음을 의미한다.

정보가 쓰이게되면, 새로운 세그먼트에 쓰이게되고, refresh 프로세스가 오래된 정보를 기록한다.

오래된 세그먼트는 다른 세그먼트와 병합이 되면서 오래된 정보가 최종적으로 삭제된다.

 

2. 인덱스 flush

새로 인덱싱된 문서가 메모리 버퍼에 추가되는 동시에 그 문서들은 샤드의 translog에 추가됨.

또한 30분 마다, 혹은 translog 파일이 512MB에 도달하면 인덱스 flush가 일어남.

flush가 일어나는 동안, 모든 문서가 새로운 세그먼트에 저장되고, 메모리 내의 모든 세그먼트가 디스크에 커밋되고 translog 파일에서 지워진다.

 

merge 시점은 기본적으로 세그먼트가 5gb에 도달하면 실행되고 커스터마이징이 가능하다.

 

참고 자료. 아이작 형님이 알려주신 자료... 이거 보고 썼음

merge policy  https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/index/MergePolicyConfig.java

es index lifecycle

https://foreversunyao.github.io/2018/01/databaseelasticsearch

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://foreversunyao.github.io/2018/01/databaseelasticsearch

https://coding-start.tistory.com/177