elasticsearch 학습노트 고급편(二)-filter 집행원리 깊이 분석

2389 단어 elasticsearch

다음은 왜 필터의 성능이 높은지, 필터의 밑바닥 원리는 도대체 무엇인지 상세하게 설명합니다.


한 검색 장면을 통해 깊이 있게 분석하면 Filter 검색 요청이 Elasticsearch에 도착했을 때 ES는 다음과 같은 조작을 한다.

(1) 역렬 인덱스에서 검색열을 찾아서documentlist 가져오기


날짜를 예로 들자면:
word         doc1    doc2    doc3
2019-01-01    *       *
2019-02-02            *        *
2019-03-03    *       *        *

filter: 2019-02-02 인덱스에서 찾아보니 2019-02-02에 대응하는documentlist는doc2,doc3

(2) 역렬 인덱스에서 검색된 모든 결과를 위한bitset 구축


이 단계는 매우 중요합니다. 찾은doclist를 사용하여bitset을 구축하면 바이너리 그룹입니다. 그룹의 모든 요소는 0 또는 1입니다. 이것은 doc가 필터 조건에 일치하는지 여부를 표시하는 데 사용됩니다. 일치하면 값은 1이고 일치하지 않으면 0입니다.그래서 위의 filter의bitset의 결과는 다음과 같다.
[0,1,1]

doc1: 이 필터와 일치하지 않는doc2와doc3: 이 필터와 일치하는 주의: 이렇게 하는 장점은 가능한 한 간단한 데이터 구조로 복잡한 기능을 실현하면 메모리 공간을 절약하고 성능을 향상시킬 수 있다는 것이다.

(3) 모든 필터 조건에 대응하는bitset을 훑어보고 가장 드문 것부터 검색하여 모든 조건을 만족시키는document를 찾습니다


한 번에 검색 요청에 여러 개의 필터 조건을 보낼 수 있기 때문에 여러 개의bitset가 생성됩니다. 모든 필터 조건에 대응하는bitset은 가장 드문 것부터 반복합니다.
[0,0,0,0,0,0,0,1]   bitset
[1,0,1,1,0,1,0,1]

여기는 주로 비교적 드문드문bitset을 먼저 훑어보면 가능한 한 많은 데이터를 필터할 수 있기 때문이다

(4)caching bitset


chingbitset은query를 추적합니다. 최근 256개query에서 일정한 횟수를 초과한 필터 조건을bitset에 캐시합니다.소segment(<1000 또는 <3%)에 대해bitset을 캐시하지 않습니다.이렇게 다음에 이 조건이 있을 때 역렬 인덱스를 다시 스캔하지 않고bitset를 반복적으로 생성하면 성능을 대폭 향상시킬 수 있다.
설명: 1. 최근 256개의 filter 중 어떤 filter가 일정한 횟수를 초과했다. 이 횟수가 고정되지 않으면elasticsearch는 이 filter에 대응하는bitset2, filter가 작은segment를 대상으로 얻은 결과를 캐시하지 않아도 된다. segment 기록수는 1000보다 작거나 segment 크기는 index 전체 크기의 3%보다 작다.이때segment 데이터량이 매우 적기 때문에 스캐닝이라도 매우 빠르다.segment는 백엔드에서 자동으로 통합됩니다. 작은 segment는 곧 다른 작은 segment와 큰 segment로 통합됩니다. 이때 캐시는 재미가 없습니다. segment는 곧 사라집니다.

필터가query보다 좋은 이유는 관련도 점수를 계산하지 않는 것 외에 이cachingbitset도 있습니다.그래서 필터 성능이 높을 거예요.


(5) filter 대부분의 경우query 이전에 실행되어 가능한 한 많은 데이터를 필터할 수 있다


query: 모든doc의 관련도 점수를 계산하고, 이 관련도 점수에 따라 정렬 필터를 합니다. 단지 원하는 데이터를 간단하게 필터할 뿐, 관련도 점수를 계산하지 않고, 정렬하지 않습니다.

(6)document에 추가와 수정이 있으면cachingbitset은 자동으로 업데이트됩니다


이 과정은 ES 내부에서 한 것이다. 예를 들어 이전의bitset은 [0,0,0,1]이다.그러면 현재 데이터를 삽입하거나 업데이트한 데이터doc5, 그리고doc5도 캐시된bitset[0,0,0,1]의 filter 조회 조건에 있습니다. 그러면 ES는 자동으로 이bitset을 업데이트하여 [0,0,0,1,1]로 바꿉니다.

(7) 앞으로 같은 필터 조건의 조회 요청이 오면 이 필터 조건에 대응하는bitset을 직접 사용합니다


이렇게 하면 검색 성능이 매우 높고, 일부 뜨거운 필터 검색은cache에 의해 저장된다.

좋은 웹페이지 즐겨찾기