Atlas Search 쿼리 성능
이 페이지의 내용
쿼리 연산자 및 쿼리 복잡성 고려
Atlas Search 쿼리의 복잡성 수준과 사용되는 연산자 유형은 데이터베이스 성능에 영향을 미칠 수 있습니다. 여러 절이 있는 매우 복잡한 쿼리는 regex (정규 표현식) 연산자를 사용하는 쿼리와 마찬가지로 리소스를 많이 사용합니다.
복합 쿼리
쿼리에 중첩된 복합 문이 여러 개 포함된 경우 이러한 내용이 중복되지 않는지 확인하세요. 절이 프로그래밍 방식으로 추가되는 경우 애플리케이션에서 논리를 구현하여 쿼리에 중복 절이 포함되지 않도록 하는 것이 좋습니다. 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 $regex 와 Atlas Search $search 는 지리 공간적 매개변수를 다르게 처리합니다. MongoDB에서 좌표 사이의 선은 구형이므로 항공 비행과 같은 장거리 좌표에 적합합니다. Atlas Search는 좌표 사이에 직선을 그리는 루센을 사용하며, 근거리 검색에 적합합니다. 자세한 내용 은 Atlas Search 복합 지리 공간적 JSON 쿼리를 실행하는 방법을 참조하세요. | |
온프레미스 또는 로컬 배포 | Atlas Search는 온프레미스 또는 로컬 배포에 사용할 수 없습니다. Atlas Search는 Atlas cluster의 데이터에만 사용할 수 있습니다. | |
검색 쿼리 자동 완성 | 문자 자동 완성(nGram)의 경우, Atlas Search에는 왼쪽에서 오른쪽으로 자동 완성하는 단어 자동 완성(wordGrams)의 경우, Atlas Search에는 인접한 단어를 연결하여 단일 토큰을 생성함으로써 단어 기반 자동 완성을 지원하는 싱글 토큰 필터가 포함되어 있습니다. 자세히 알아보려면 Atlas Search에서 자동 완성을 사용하는 방법 튜토리얼을 참조하세요. | |
텍스트 입력에 대한 유사 항목 일치 | ||
여러 문자열을 기반으로 필터링 | Atlas Search 복합 은 여러 문자열을 기반으로 하는 필터링을 지원합니다. | |
관련성 점수 정렬 검색 | Atlas Search는 BM25 알고리즘 을 사용합니다. 문서의 검색 관련성 점수를 결정합니다. boost 곱하기 및 가우스 감쇠와 같은 표현식과 분석기, 검색 연산자 및 동의어를 통해 고급 구성을 지원합니다. 자세한 내용 은 가중치 필드를 사용하여 Atlas Search 복합 쿼리를 실행하는 방법을 참조하세요. | |
부분 인덱스 | Atlas Search는 부분 인덱스 생성을 지원하지 않습니다. | |
부분 일치 | Atlas Search 와일드카드 및 자동 완성 연산자는 부분 일치 쿼리를 지원합니다. 자세히 알아보려면 부분 일치 Atlas Search 쿼리를 실행하는 방법을 참조하세요. | |
배열의 단일 복합 인덱스 | Atlas Search 텀 인덱스는 단일 Atlas Search 인덱스에서 교차되며, 배열을 필터링하기 위한 복합 인덱스가 필요하지 않습니다. | |
동의어 검색 | Atlas Search는 별도의 컬렉션에 정의된 동의어 를 지원하며, 이를 검색 인덱스에서 참조하여 사용할 수 있습니다. 자세히 알아보려면 Atlas Search에서 동의어를 사용하는 방법 튜토리얼을 참조하세요. | |
카운트용 패싯 | Atlas Search은 텍스트 기준을 기반으로 문서를 빠르게 카운트할 수 있으며, 숫자 및 날짜에 대한 패싯 검색도 지원합니다. 자세한 내용은 Atlas Search에서 패싯을 사용하는 방법을 참조하세요. | |
메타데이터 추출 | 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
으)로 대체하여 텍스트 쿼리의 성능을 개선하는 방법을 설명합니다.
$search
$match
를 피하세요.
$search 단계 이후에 $match 집계 파이프라인 단계를 사용하면 쿼리 결과가 $search
크게 느려질 수 있습니다. 가능하면 $search
단계에서 필요한 모든 필터링이 발생하여 $match
단계가 필요하지 않도록 쿼리를 설계합니다.
Atlas Search 복합 연산자는 여러 필터링 작업이 필요한 쿼리에 도움이 $match
됩니다. 집계 파이프라인에서 단계를 사용해야 하는 경우 조건에 필요한 필드만 저장하는 storedSource $match
옵션을 사용하는 것이 좋습니다. 그런 다음 returnStoredSource 옵션을 사용하여 저장된 필드를 검색할 수 있습니다.
$search
$group
를 피하세요.
$search 단계 이후에 집계 파이프라인 단계를 사용하면 쿼리 결과가 $group
느려질 수 있습니다. 를 사용하여 $group
필드 애그리게이션에 대한 기본 카운트를 가져오는 $searchMeta
경우 대신 단계 내에서 패싯 을 사용하는 것이 좋습니다.
$search
$sort
를 피하세요.
$search 단계 이후에 $sort 집계 파이프라인 단계를 사용하면 쿼리 결과가 크게 느려질 수 있습니다.
숫자, 날짜 또는 문자열 필드를 정렬하려면
sort
옵션을$search
단계와 함께 사용합니다. 자세한 내용은 Atlas Search를 참조하세요.지리적 필드를 정렬하려면 near 연산자를 사용합니다.
다른 필드를 정렬하려면
$sort
및 returnStoredSource 필드를 사용합니다.
이후 및 사용 제한 $skip
$limit
$search
쿼리 결과가 큰 경우 $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는 getmore 작업 수와 같이 Atlas에서 측정되는 지표 에 영향을 미치는 MongoDB의 데이터를 복제합니다.
참고
클러스터의 리소스가 허용 가능한 성능 한도에 도달했거나 이에 근접한 경우, Atlas Search 기능을 구현하기 전에 더 큰 클러스터 계층으로 업그레이드 하는 것이 좋습니다.
학습 계속하기
이 동영상을 따라하면서 explain 및 $검색 점수 세부 정보를 사용하여 Atlas Search 결과를 이해하고, 반복하고, 개선하는 방법을 알아보세요.
기간: 5 분