Step 1.
- ES는 색인 요청받은 Data를 Inverted Index Data로 변환하여 Indexing Buffer에 기록 (Indexing Buffer는 Lucene 용어로 In-memory buffer)
- Inverted Index - https://jw92.tistory.com/27
- 또한 색인을 위한 Data는 Log형태(Index Operation)로 Translog 파일에 기록
- Translog는 허용 용량(Default 512Mb)이 초과할 경우 가장 오래된 파일부터 삭제하며 허용 시간(Default 12h)이 지나도 삭제됨
- Translog 데이터는 setting에 따라 index request마다 기록할지(default), interval에 따라 async로 기록할지 설정 가능
- 본 Step이 마무리 될 경우 Elasticsearch는 해당 Indexing(Index or Bulk) Request에 대하여 Success 리턴
Step 2.
- Indexing Buffer에 저장된 데이터를 세그먼트 파일 포맷으로 Encoding하여 OS Cache(이하 Page Cache)에 업로드
- write() 시스템 콜 호출에 의해 Page Cache로 업로드 진행
- Page Cache에 업로드된 세그먼트의 Indexing Data는 검색이 가능하며 해당 세그먼트는 "uncommited" 상태
- 아래 조건 중 하나가 만족될 경우에 Trigger
- Indexing Buffer가 Full일 경우
- "refresh_interval"을 통해 설정된 주기가 만료되었을 경우
- ES API(_refresh)의 명시적 호출
- 본 Step이 마무리 될 경우 해당 Segment 데이터는 ES에서 Search 가능함
Step 3.
- Page Cache에 저장된 Segment 파일을 실제 물리적인 Filesystem에 저장
- fsync() 시스템 콜 호출에 의해 진행
- Filesystem에 저장 후 해당 Semgent는 "commited" 상태로 변경
- 아래 조건 중 하나가 만족될 경우에 Trigger
- Page Cache가 Full이며 OS 알고리즘에 의해 선택되어진 경우
- Elasticsearch의 flush 주기가 만료되었을 경우
- ES API(_flush)의 명시적 호출
Step 4.
- Filesystem에 저장 완료된 세그먼트로 Commit Point 갱신 후 새로운 Translog 파일을 생성
- 이후 요청되는 Indexing Data는 새로 생성된 Translog 파일에 기록
Step 5.
- 해당 인덱스 샤드에 대한 Merge 요청을 Merge Scheduler에 등록
- Merge Policy에 따라 해당 인덱스 샤드 세그먼트들의 Merge가 필요한지 체크 후 필요할 경우 Merge를 수행
- Merge 대상 세그먼트들은 신규 세그먼트가 아닌 Merge Policy에 따라 선정된 세그먼트들임
- Elastic Search는 Indexing Data를 세그먼트로 생성 시 압축 알고리즘을 사용하여 Compression 수행
Index Codec
- ElasticSearch는 Indexing Data를 세그먼트로 생성 시 압축 알고리즘을 사용하여 Compression 수행
- Default로 LZ4라는 압축 알고리즘을 사용한 Codec을 사용
- best_compression 설정을 통해 DEFLATE 압축 알고리즘을 사용하는 Codec으로 변경 가능하며
이 경우 압축율 증가 효과 → 압축율 증가로 전제 세그먼트 사이즈는 줄어들지만
Indexing 시 CPU 점유율 및 Search Latency가 증가하는 성능 Trade Off 존재
Elasticsearch 관련 글)
https://jw92.tistory.com/5 설치 및 configuration (기본적인 설정)
https://jw92.tistory.com/6 vm.max_map_count 버그 해결
https://jw92.tistory.com/25 Indexing Process
https://jw92.tistory.com/26 Search Process
https://jw92.tistory.com/27 Indexing 방식 - Inverted Index
https://jw92.tistory.com/34 Indexing 파일 - Segment
'Elasticsearch (엘라스틱서치)' 카테고리의 다른 글
Elasticsearch (엘라스틱서치)의 Indexing 파일 - Segment (0) | 2022.09.13 |
---|---|
Elasticsearch (엘라스틱서치)의 Indexing 방식 - Inverted Index (0) | 2022.09.02 |
Elasticsearch (엘라스틱서치)의 Search Process (0) | 2022.09.02 |
Elasticsearch (엘라스틱서치) vm.max_map_count 버그 해결 (0) | 2021.04.10 |
Elasticsearch (엘라스틱서치) 시작하기 1. 설치 및 configuration (기본적인 설정) (0) | 2021.04.07 |