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에 의해 저장된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.