문서 메뉴
문서 홈
/
MongoDB Atlas
/ /

Atlas Search 쿼리 성능

이 페이지의 내용

  • 쿼리 연산자 및 쿼리 복잡성 고려
  • $text 또는 $regex대신 $search 사용
  • $search $match 를 피하세요.
  • $search $group 를 피하세요.
  • $search $sort 를 피하세요.
  • 이후 및 사용 제한 $skip $limit $search
  • 성능 모니터링
  • 학습 계속하기

Atlas Search 쿼리의 복잡성 수준과 사용되는 연산자 유형은 데이터베이스 성능에 영향을 미칠 수 있습니다. 여러 절이 있는 매우 복잡한 쿼리는 regex (정규 표현식) 연산자를 사용하는 쿼리와 마찬가지로 리소스를 많이 사용합니다.

쿼리에 중첩된 복합 문이 여러 개 포함된 경우 이러한 내용이 중복되지 않는지 확인하세요. 절이 프로그래밍 방식으로 추가되는 경우 애플리케이션에서 논리를 구현하여 쿼리에 중복 절이 포함되지 않도록 하는 것이 좋습니다. mongot 가 수행하는 모든 필드별 점수 계산(예: mustshould 절의 경우)은 실행 시간을 늘립니다.

Atlas Search 패싯 수집기를 사용하여 메타데이터를 추출하고 검색 결과 및 메타데이터에 대해 여러 쿼리를 실행하지 않도록 할 수 있습니다. 예시는 메타데이터 및 검색 결과 예시를 참조하세요.

Atlas Search 쿼리는 점수 별로 순위가 매겨집니다. 많은 수의 결과를 반환하는 쿼리는 결과 집합의 모든 점수를 추적해야 하기 때문에 계산 집약적입니다.

MongoDB $text$regex 쿼리에 크게 의존하는 애플리케이션의 경우, 다음 권장 사항을 사용하여 애플리케이션을 리팩터링할지, 아니면 애플리케이션을 Atlas Search $search 로 마이그레이션할지 결정합니다. $search 집계 파이프라인 단계는 MongoDB 연산자를 통해 사용할 수 없거나 MongoDB 연산자를 통해 사용할 수 있지만 Atlas Search $search 만큼 성능이 떨어지는 기능을 제공합니다.

다음 표는 MongoDB $regex, $text 및 Atlas Search $search 가 애플리케이션의 요구 사항을 해결하는 방법을 보여줍니다.

애플리케이션에 다음이 필요한 경우...
사용...
왜냐하면...
쓰기 고려를 존중하는 데이터 저장소
쓰기 후 읽기가 많은 트랜잭션의 경우 $regex 을 권장합니다. $search 의 경우 쓰기 후 읽기가 거의 발생하지 않습니다.
쓰기 성능에 최적화된 클러스터
Atlas Search 인덱스는 클러스터 쓰기 성능을 저하시키지 않습니다.
대규모 데이터 세트 검색
Atlas Search는 반전 인덱스를 사용하므로 매우 큰 규모의 문서를 빠르게 검색할 수 있습니다.
언어 인식
Atlas Search는 검색 관련성을 높이기 위해 언어를 토큰화(검색 가능한 용어 생성)하고, 불용어를 제거하고, 발음 부호를 해석할 수 있는 다양한 언어 분석기를 지원합니다. 자세한 내용은 다국어 Atlas Search 쿼리 실행 방법을 참조하세요.
대소문자를 구분하지 않는 텍스트 검색
결과 텍스트 강조 표시
Atlas Search 강조 표시를 사용하면 결과의 문서를 상황에 맞게 조정할 수 있으며, 이는 자연어 쿼리에 필수적입니다.
지리 공간적 인식 검색 쿼리
MongoDB $regex 와 Atlas Search $search 는 지리 공간적 매개변수를 다르게 처리합니다. MongoDB에서 좌표 사이의 선은 구형이므로 항공 비행과 같은 장거리 좌표에 적합합니다. Atlas Search는 좌표 사이에 직선을 그리는 루센을 사용하며, 근거리 검색에 적합합니다. 자세한 내용 은 Atlas Search 복합 지리 공간적 JSON 쿼리를 실행하는 방법을 참조하세요.
온프레미스 또는 로컬 배포
$regex 또는 $text
Atlas Search는 온프레미스 또는 로컬 배포에 사용할 수 없습니다. Atlas Search는 Atlas cluster의 데이터에만 사용할 수 있습니다.
검색 쿼리 자동 완성

문자 자동 완성(nGram)의 경우, Atlas Search에는 왼쪽에서 오른쪽으로 자동 완성하는 edgeGrams, 공백이 없는 언어의 자동 완성을 위한 nGrams, 오른쪽에서 왼쪽으로 쓰고 읽는 언어의 자동 완성을 위한 rightEdgeGram 가 포함되어 있습니다.

단어 자동 완성(wordGrams)의 경우, Atlas Search에는 인접한 단어를 연결하여 단일 토큰을 생성함으로써 단어 기반 자동 완성을 지원하는 싱글 토큰 필터가 포함되어 있습니다.

자세히 알아보려면 Atlas Search에서 자동 완성을 사용하는 방법 튜토리얼을 참조하세요.

텍스트 입력에 대한 유사 항목 일치
Atlas Search 텍스트자동 완성 연산자는 fuzzy 일치를 지원하여 입력 텍스트를 필터링하고 철자가 틀린 단어(오타)를 해결합니다.
여러 문자열을 기반으로 필터링
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 자동 완성 연산자를 대신 사용할 때 향상된 성능을 제공합니다.

다음도 참조하세요.

$search 단계 이후에 $match 집계 파이프라인 단계를 사용하면 쿼리 결과가 $search 크게 느려질 수 있습니다. 가능하면 $search 단계에서 필요한 모든 필터링이 발생하여 $match 단계가 필요하지 않도록 쿼리를 설계합니다.

Atlas Search 복합 연산자는 여러 필터링 작업이 필요한 쿼리에 도움이 $match 됩니다. 집계 파이프라인에서 단계를 사용해야 하는 경우 조건에 필요한 필드만 저장하는 storedSource $match 옵션을 사용하는 것이 좋습니다. 그런 다음 returnStoredSource 옵션을 사용하여 저장된 필드를 검색할 수 있습니다.

다음도 참조하세요.

$search 단계 이후에 집계 파이프라인 단계를 사용하면 쿼리 결과가 $group 느려질 수 있습니다. 를 사용하여 $group 필드 애그리게이션에 대한 기본 카운트를 가져오는 $searchMeta 경우 대신 단계 내에서 패싯 을 사용하는 것이 좋습니다.

$search 단계 이후에 $sort 집계 파이프라인 단계를 사용하면 쿼리 결과가 크게 느려질 수 있습니다.

  • 숫자, 날짜 또는 문자열 필드를 정렬하려면 sort 옵션을 $search 단계와 함께 사용합니다. 자세한 내용은 Atlas Search를 참조하세요.

  • 지리적 필드를 정렬하려면 near 연산자를 사용합니다.

  • 다른 필드를 정렬하려면 $sortreturnStoredSource 필드를 사용합니다.

쿼리 결과가 큰 경우 $skip$limit 를 사용하여 비순차적으로 결과를 검색하면 속도가 느려질 수 있습니다. 최적의 성능을 위해 $search searchAfter 또는 searchBefore 옵션을 사용하여 결과를 페이지로 매깁니다. 자세한 내용 은 결과 페이지 매김을 참조하세요.

2 페이지에서 5 페이지로 이동하는 등 비순차적 결과를 반환하려면 다음 파이프라인 단계를 사용할 수 있습니다.

  • $search searchAfter 2페이지의 마지막 결과

  • $skip 3 및 4페이지의 문서

  • $limit 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$검색 점수 세부 정보를 사용하여 Atlas Search 결과를 이해하고, 반복하고, 개선하는 방법을 알아보세요.

기간: 5 분

← Atlas Search 인덱스 성능