Atlas Search 쿼리 성능
이 페이지의 내용
쿼리 연산자 및 쿼리 복잡성 고려하기
Atlas Search 쿼리의 복잡성 수준 및 사용된 연산자 유형은 데이터베이스 성능에 영향을 미칠 수 있습니다. 여러 개의 절이 있는 매우 복잡한 쿼리는 리소스를 많이 사용하며, 정규식(정규 표현식) 또는 와일드카드 연산자를 사용하는 쿼리도 마찬가지입니다.
복합 쿼리
쿼리에 중첩된 복합 문이 여러 개 포함된 경우 이러한 내용이 중복되지 않는지 확인하세요. 절이 프로그래밍 방식으로 추가되는 경우 애플리케이션에서 논리를 구현하여 쿼리에 중복 절이 포함되지 않도록 하는 것이 좋습니다. mongot
가 수행하는 모든 필드별 점수 계산(예: must
및 should
절의 경우)은 실행 시간을 늘립니다.
패싯 검색
Atlas Search 패싯 수집기를 사용하여 메타데이터를 추출하고 검색 결과 및 메타데이터에 대한 여러 쿼리를 실행하지 않아도 됩니다. 예시는 메타데이터 및 검색 결과 예시를 참조하세요.
결과 점수 매기기
Atlas Search 쿼리는 점수를 기준으로 순위가 매겨집니다. 많은 수의 결과를 반환하는 쿼리는 결과 집합에 대한 모든 점수를 추적해야 하므로 계산 집약적입니다.
$text
또는 $regex
대신 $search
사용
MongoDB $text
및 $regex
쿼리에 크게 의존하는 애플리케이션의 경우 다음 권장 사항을 사용하여 애플리케이션을 리팩터링할지, Atlas Search $search
로 마이그레이션할지 결정하세요. $search
집계 파이프라인 단계는 MongoDB 연산자를 통해 사용할 수 없거나, MongoDB 연산자를 통해 사용할 수 있지만 Atlas Search $search
만한 성능을 보여주지 못하는 기능을 제공합니다.
다음 표는 MongoDB $regex
, $text
및 Atlas Search $search
가 애플리케이션의 요구 사항을 해결하는 방법을 보여줍니다.
애플리케이션에 다음이 필요한 경우... | 사용... | 왜냐하면... |
---|---|---|
쓰기 고려를 존중하는 데이터 저장소 | ||
쓰기 성능에 최적화된 클러스터 | Atlas Search 인덱스는 클러스터 쓰기 성능을 저하시키지 않습니다. | |
대규모 데이터 세트 검색 | Atlas Search는 반전 인덱스를 사용하므로 매우 큰 규모의 문서를 빠르게 검색할 수 있습니다. | |
언어 인식 | Atlas Search는 검색 관련성을 높이기 위해 언어를 토큰화(검색 가능한 용어 생성)하고, 불용어를 제거하고, 발음 부호를 해석할 수 있는 다양한 언어 분석기를 지원합니다. 자세한 내용은 다국어 Atlas Search 쿼리 실행 방법을 참조하세요. | |
대소문자를 구분하지 않는 텍스트 검색 | ||
결과 텍스트 강조 표시 | Atlas Search 강조 표시를 사용하면 결과의 문서를 상황에 맞게 조정할 수 있으며, 이는 자연어 쿼리에 필수적입니다. | |
지리 공간적 인식 검색 쿼리 | MongoDB | |
온프레미스 또는 로컬 배포 | Atlas Search는 온프레미스 또는 로컬 배포에 사용할 수 없습니다. Atlas Search는 Atlas 클러스터의 데이터에만 사용할 수 있습니다. | |
검색 쿼리 자동 완성 | 문자 자동 완성(nGram)의 경우, Atlas Search에는 왼쪽에서 오른쪽으로 자동 완성하는 단어 자동 완성(wordGrams)의 경우, Atlas Search에는 인접한 단어를 연결하여 단일 토큰을 생성함으로써 단어 기반 자동 완성을 지원하는 싱글 토큰 필터가 포함되어 있습니다. 자세한 내용은 Atlas Search에서 자동 완성 기능을 사용하는 방법 튜토리얼을 참조하세요. | |
텍스트 입력에 대한 유사 항목 일치 | ||
여러 문자열을 기반으로 필터링 | Atlas Search compound는 여러 문자열을 기반으로 하는 필터링을 지원합니다. | |
관련성 점수 정렬 검색 | Atlas Search는 BM25 알고리즘을 사용하여 문서의 검색 관련성 점수를 결정합니다. 이는 곱하기 및 가우스 감쇠와 같은 | |
부분 인덱스 | Atlas Search는 부분 인덱스 생성을 지원하지 않습니다. | |
부분 일치 | Atlas Search 와일드카드 및 자동 완성 연산자는 부분 일치 쿼리를 지원합니다. 자세히 알아보려면 부분 일치 Atlas Search 쿼리를 실행하는 방법을 참조하세요. | |
배열의 단일 복합 인덱스 | Atlas Search 텀 인덱스는 단일 Atlas Search 인덱스에서 교차되며, 배열을 필터링하기 위한 복합 인덱스가 필요하지 않습니다. | |
동의어 검색 | Atlas Search 지원 별도의 컬렉션에 정의된 동의어 를 지원하며, 이를 검색 인덱스에서 참조하여 사용할 수 있습니다. 자세히 알아보려면 Atlas Search에서 동의어를 사용하는 방법을 참조하세요. | |
카운트용 패싯 | Atlas Search은 텍스트 기준을 기반으로 문서를 빠르게 카운트할 수 있으며, 숫자 및 날짜에 대한 패싯 검색도 지원합니다. 자세한 내용은 Atlas Search에서 패싯을 사용하는 방법을 참조하세요. | |
Extract metadata | Atlas Search 패싯 수집기는 메타데이터를 반환하며 메타데이터를 검색하기 위해 여러 쿼리를 실행할 필요가 없습니다. 자세한 내용은 Atlas Search에서 패싯을 사용하는 방법 튜토리얼을 참조하세요. | |
사용자 지정 분석기 | Atlas Search는 특정 인덱싱 요구 사항에 맞는 사용자 지정 분석기를 지원합니다.별 예를 들어, 사용자 지정 분석기를 사용하여 이메일 주소와 HTTP 또는 HTTPS URL을 인덱스하고 검색할 수 있습니다. 자세한 내용은 사용자 지정 분석기를 정의하고 발음 구별 부호 무감지 Atlas Search 쿼리를 실행하는 방법을 참조하세요. | |
구문 또는 여러 단어 검색 | Atlas Search 구문 연산자는 일련의 용어 검색을 지원합니다. | |
정규 표현식으로 검색 | 대신 Atlas Search 자동 완성 연산자를 사용하면 Atlas Search에서 향상된 성능을 누릴 수 있습니다. |
다음도 참조하세요.
검색 성능 개선을 위한 Atlas Search로 $text 쿼리 업데이트에서는 쿼리의
$text
집계 파이프라인 단계를$search
로 대체하여 이러한 쿼리의 유연성과 성능을 모두 개선하는 방법을 설명합니다.전체 텍스트 정규식 쿼리에 Atlas Search 사용 - 비효율적인 정규 표현식 일치를
$search
로 대체하여 텍스트 쿼리의 성능을 개선하는 방법에 대해 설명합니다.
$limit
전에$facet
사용
$facet
집계 파이프라인 라인 단계 이후에 $limit
집계 파이프라인 단계를 사용하면 쿼리 성능에 부정적인 영향 수 있습니다. 성능 병목 현상을 방지하려면 $limit
을 $facet
전에 사용하세요.
예시
{ { "$search": {...} }, { "$limit": 20 }, { "$facet": { "results": [], "totalCount": $$SEARCH_META } } }
다음 예시에서 데모를 확인하세요.
$search
후 $match
피하기
$search 단계 이후에 $match 집계 파이프라인 단계를 사용하면 쿼리 결과가 크게 느려질 수 있습니다. 가능하면 $search
단계에서 필요한 모든 필터링이 발생하여 $match
단계가 필요하지 않도록 $search
쿼리를 설계합니다.
Atlas Search 복합 연산자는 여러 필터링 작업이 필요한 쿼리에 도움이 됩니다. 집계 파이프라인에서 $match
단계를 사용해야 하는 경우 storedSource 옵션을 사용하여 $match
조건에 필요한 필드만 저장하는 것을 고려해 보세요. 그런 다음 returnStoredSource 옵션을 사용하여 저장된 필드를 검색할 수 있습니다.
다음도 참조하세요.
$search
후 $group
피하기
$search 단계 이후에 $group
집계 파이프라인 단계를 사용하면 쿼리 결과가 느려질 수 있습니다. 필드 집계를 위한 기본 카운트를 얻기 위해 $group
을 사용하는 경우, 대신 $searchMeta
단계 내에서 facet을 사용하는 것을 권장합니다.
$search
후 $count
피하기
$search 단계 이후에 $count
집계 파이프라인 단계를 사용하면 쿼리 결과가 느려질 수 있습니다. $count
를 사용하여 문서 개수를 계산하는 경우 대신 $search
또는 $searchMeta
단계 내에서 count를 사용하는 것이 좋습니다.
$search
후 $sort
피하기
$search 단계 이후에 $sort 집계 파이프라인 단계를 사용하면 쿼리 결과가 크게 느려질 수 있습니다.
숫자, 날짜 또는 문자열 필드를 정렬하려면
$search
단계에서sort
옵션을 사용하세요. 자세히 알아보려면 Atlas Search 결과 정렬을 참조하세요.지리적 필드를 정렬하려면 near 연산자를 사용하세요.
다른 필드를 정렬하려면
$sort
및 returnStoredSource 필드를 사용합니다.
$search
이후 $skip
및 $limit
사용 제한
$skip
및 $limit
를 사용하여 결과를 비순차적으로 검색하면 쿼리 결과가 큰 경우 속도가 느려질 수 있습니다. 최적의 성능을 위해 $search
searchAfter
또는 searchBefore
옵션을 사용하여 결과 페이지를 매깁니다. 자세한 내용은 결과 페이지 매기기를 참조하세요.
2페이지에서 5페이지로 이동하는 것과 같은 비순차적 결과를 반환하려면 다음 파이프라인 단계를 사용할 수 있습니다.
여기서 쿼리는 searchAfter
를 사용하지 않은 경우 4페이지를 건너뛰는 대신 결과의 2페이지만 건너뛰도록 최적화되었습니다. 이에 대한 데모는 쿼리 결과를 페이지별로 나누는 방법을 참조하세요.
성능 모니터링
Atlas cluster를 monitor 하고 Atlas Metrics 탭에서 성능 통계가 포함된 Atlas Charts를 볼 수 있습니다. 이러한 지표는 Atlas Search 쿼리 및 인덱스 구축이 클러스터 성능에 어떤 영향을 미치는지 확인하는 데 도움이 될 수 있습니다. 자세히 알아보려면 Atlas Search 지표 검토를 참조하세요.
Atlas는 다음과 같은 경우에 일부 Atlas 경고를 트리거할 수 있습니다.
Atlas Search는 클러스터에 쿼리를 수행하며 이는 쿼리 타겟팅 지표와 같은 Atlas 성능 지표에 영향을 미칠 수 있습니다.
Atlas Search 프로세스(
mongot
)에서 Atlas Search 인덱스를 업데이트 상태로 유지하기 위해 사용하는 변경 스트림 커서는 쿼리 타겟 비율에 영향을 줄 수 있으며 비율이 높을 경우 쿼리 타겟 경고를 트리거할 수 있습니다.Atlas Search는 getmore 작업 수와 같이 Atlas에서 측정된 지표에 기여하는 MongoDB의 데이터를 복제합니다.
참고
클러스터 리소스가 부족하거나 허용 가능한 성능 한계에 가까워지면 Atlas Search 기능을 구현하기 전에 더 큰 클러스터 계층으로 업그레이드하는 것을 고려하세요
다음도 참조하세요.
학습 계속하기
이 영상을 따라가면 explain과 $search 점수 세부 정보를 활용해 Atlas Search 결과를 이해하고, 반복하고, 개선하는 방법을 알아볼 수 있습니다.
소요 시간: 5분