UFO ET IT

새로 고침과 플러시

ufoet 2020. 11. 7. 18:15
반응형

새로 고침과 플러시


새 문서가 Elasticsearch 인덱스에 인덱싱되면 인덱스 작업 후 1 초와 같은 검색에 사용할 수 있습니다. 그러나 인덱스에 대한 호출 _flush또는 _refresh작업을 통해이 문서를 즉시 검색 가능하게 만들 수 있습니다 . 이 두 작업의 차이점은 무엇입니까? 결과가 동일 해 보이며 문서를 즉시 검색 할 수 있습니다.

이러한 각 작업은 정확히 무엇을합니까?

ES 문서는이 문제를 깊이 다루지 않는 것 같습니다.


당신이 얻은 대답은 맞지만 좀 더 자세히 설명해 볼 가치가 있다고 생각합니다.

새로 고침은 lucene 인덱스 리더에서 다시 열기를 효과적으로 호출하므로 검색 할 수있는 데이터의 특정 시점 스냅 샷이 업데이트됩니다. 이 lucene 기능은 lucene 거의 실시간 API의 일부입니다.

elasticsearch 새로 고침 검색을위한 문서를 사용할 수 있지만, 그것은 fsync를 호출하지 않는 한 그들은 따라서 보증 내구성하지 않는, 영구 저장 장치에 디스크에 기록되어 있는지 확인하지 않습니다. 데이터를 내구성있게 만드는 것은 훨씬 더 비싼 lucene 커밋입니다.

매초마다 lucene reopen을 호출 할 수 있지만 lucene commit으로 동일한 작업을 수행 할 수 없습니다.

lucene을 통해 reopen을 꽤 자주 호출하여 거의 실시간으로 새 문서를 검색 할 수 있지만, 데이터가 디스크에 기록되고 fsync되었는지 확인하려면 커밋을 호출해야합니다.

Elasticsearch는 아직 커밋되지 않은 쓰기 작업이 저장되는 샤드 당 트랜잭션 로그 (효과적으로 lucene 인덱스)를 추가하여이 "문제"를 해결합니다. 트랜잭션 로그는 fsync되고 안전하므로 아직 커밋되지 않은 문서의 경우에도 언제든지 내구성을 얻을 수 있습니다. 새로 고침이 매초마다 자동으로 발생하므로 거의 실시간으로 문서를 검색 할 수 있으며, 문제가 발생하면 트랜잭션 로그를 재생하여 결국 손실 된 문서를 복원 할 수 있습니다. 트랜잭션 로그의 좋은 점은 내부적으로 다른 용도로 사용할 수 있다는 것입니다 (예 : 실시간 get by id 제공) .

elasticsearch 플러시는 데이터가 루씬 수준에 최선을 다하고되면, 내구성 루씬 자체에 의해 보장 될 수 있기 때문에, 트랜잭션 로그를 효과적으로 루씬 커밋 트리거, 또한 빈 상자. Flush도 API로 노출되며 일반적으로 필요하지 않지만 조정할 수 있습니다. 플러시는 트랜잭션 로그에 추가되는 작업 수, 작업 크기 및 마지막 플러시 발생시기에 따라 자동으로 발생합니다.


새로 고치면 새 세그먼트가 작성되므로 검색 할 수 있습니다.

플러시로 인해 Lucene 커밋이 발생합니다. 이것은 훨씬 더 비쌉니다.

자세한 내용은 이에 대한 일부를 다루는 기사를 작성했습니다 . 아래에서 위로 Elasticsearch :)


  1. 새로 고침 : 메모리 내 버퍼를 검색 할 수있는 메모리 내 세그먼트로 변환합니다.
  2. 플러시 : (a) 작은 세그먼트를 큰 세그먼트로 병합 (b) 큰 세그먼트를 디스크에 fsync (c) 빈 트랜스 로그.

새로 고침 :

새롭게 하다

플러시 :

플러시

세그먼트는 lucene의 일부입니다. 불변 세그먼트는 OS 페이지 캐시를 항상 깨끗하게 만듭니다.

Translog는 Elasticsearch의 일부입니다. Translog는 내구성을 목표로합니다.

참조 : Elasticsearch의 새로 고침 및 플러시 작업 가이드

참고 URL : https://stackoverflow.com/questions/19963406/refresh-vs-flush

반응형