데이터베이스/Lucene

Lucene의 commit과 flush의 차이

반응형

Lucene에서 데이터 색인을 위해서 사용하는 IndexWriter의 flush와 commit 두 가지 command의 차이를 정리해보자.

 

두 개의 operation 이름만 보게되면 동일한 동작을 수행할 것 같지만 실질적으로 다른 동작을 수행한다.

 

우선 공통적으로 commit과 flush는 둘 다 메모리에 있는 데이터를 디스크에 쓰는 작업을 한다. 하지만 이 부분에 차이점이 있는데 commit은 인덱스를 업데이트하여 디스크에 데이터를 바로 찾을 수 있도록 하는 추가작업을 수행한다.

 

 

그래서 만약 lucene IndexWriter에서 flush만 수행하고 commit을 하지 않았다면 해당 인덱스에 대한 변경사항은 검색할 수 없다.

그렇다면 commit을 수행하고 flush를 하지 않는다면 어떻게 될까? 이 경우에는 문제가 없다. 왜냐하면 commit은 해당 동작 수행 즉시 바로 flush를 수행하기 때문이다.

 

flushing은 일반적으로 인덱스 메모리에서 거대한 데이터를 가지기 어려울 때 주기적으로 발생되는 명령어이기도 하다. 

하지만 commit은 실제로 인덱스가 읽기 가능한 상태로 만들기 위해서 추가적으로 발생되는 비용이 있기 때문에 실제로 작업이 완료되어 검색이 가능한 상태가 되길 원할 때만 수행해야한다.

반응형