쿼리 연산자 및 쿼리 복잡성 고려하기
Atlas Search 쿼리의 복잡성 수준과 사용되는 연산자 유형은 데이터베이스 성능에 영향을 미칠 수 있습니다.
복합 연산자 사용하는 여러 절이 있는 쿼리나 regex(정규 표현식) 또는 와일드카드 연산자 사용하는 쿼리와 같이 매우 복잡한 쿼리는 리소스를 많이 사용합니다.
복합 쿼리
쿼리에 중첩된 복합 문이 여러 개 포함된 경우 이러한 내용이 중복되지 않는지 확인하세요. 절이 프로그래밍 방식으로 추가되는 경우 애플리케이션에서 논리를 구현하여 쿼리에 중복 절이 포함되지 않도록 하는 것이 좋습니다. mongot
가 수행하는 모든 필드별 점수 계산(예: must
및 should
절의 경우)은 실행 시간을 늘립니다.
패싯 검색
Atlas Search facet
수집기를 사용하면 메타데이터 추출하고 검색 결과 및 메타데이터 에 대해 여러 쿼리를 실행 하지 않아도 됩니다. 예시 는 메타데이터 및 검색 결과 예시 참조하세요.
결과 점수 매기기
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 온프레미스 또는 로컬 배포서버 에 사용할 수 없습니다. Atlas Search Atlas cluster 의 데이터에만 사용할 수 있습니다. | |
검색 쿼리 자동 완성 | ||
텍스트 입력에 대한 유사 항목 일치 | ||
여러 문자열을 기반으로 필터링 | Atlas Search compound는 여러 문자열을 기반으로 하는 필터링을 지원합니다. | |
관련성 점수 정렬 검색 | Atlas Search는 BM25 알고리즘을 사용하여 문서의 검색 관련성 점수를 결정합니다. 이는 곱하기 및 가우스 감쇠와 같은 | |
부분 인덱스 | Atlas Search는 부분 인덱스 생성을 지원하지 않습니다. | |
부분 일치 | ||
배열의 단일 복합 인덱스 | Atlas Search 텀 인덱스는 단일 Atlas Search 인덱스에서 교차되며, 배열을 필터링하기 위한 복합 인덱스가 필요하지 않습니다. | |
동의어 검색 | Atlas Search 지원 별도의 컬렉션에 정의된 동의어 를 지원하며, 이를 검색 인덱스에서 참조하여 사용할 수 있습니다. 자세히 알아보려면 Atlas Search에서 동의어를 사용하는 방법을 참조하세요. | |
카운트용 패싯 | Atlas Search은 텍스트 기준을 기반으로 문서를 빠르게 카운트할 수 있으며, 숫자 및 날짜에 대한 패싯 검색도 지원합니다. 자세한 내용은 Atlas Search에서 패싯을 사용하는 방법을 참조하세요. | |
Extract metadata | Atlas Search | |
사용자 지정 분석기 | Atlas Search는 특정 인덱싱 요구 사항에 맞는 사용자 지정 분석기를 지원합니다. 예를 들어, 사용자 지정 분석기를 사용하여 이메일 주소와 HTTP 또는 HTTPS URL을 인덱스하고 검색할 수 있습니다. | |
구문 또는 여러 단어 검색 | 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 } } }
다음 예시에서 데모를 확인하세요.
추가 MQL 애그리게이션 단계 최소화
전체 검색 로직을 단계 자체 내에 캡슐화하고 ,$search
, 또는 $group
$count
$match
과 같은 추가 $sort
차단 단계를 사용하여 최소화합니다. 이렇게 하면 Atlas Search 인덱스 사용량이 최적화되고 mongod
에서 추가 데이터베이스 작업의 필요성이 줄어듭니다.
대신 사용 compound.filter
$match
여러 필터링 작업이 필요한 쿼리의 경우 연산자 연산자 절과 compound
filter
함께 사용합니다. 집계 파이프라인 에서 $match
단계를 사용해야 하는 경우 조건에 필요한 필드만 저장 $match
storedSource 옵션을 사용하는 것이 좋습니다. 그런 다음 $search
returnStoredSource 옵션을 사용하여 저장된 필드를 mongod
조회 하고 전체 문서 조회를 피할 수 있습니다.
대신 사용 facet
$group
$group
를 사용하여 필드 애그리게이션에 대한 기본 카운트를 가져오는 경우 facet
단계 내에서 $search
수집기를 사용할 수 있습니다. 메타데이터 결과만 필요한 경우 $searchMeta
facet
단계 내에서 수집기를 대신 사용할 수 있습니다.
대신 사용 count
$count
$count
를 사용하여 문서 수를 계산하는 경우$search
또는$searchMeta
단계 내에서 대신 사용하는 것이 좋습니다.
대신,sort
near
또는 사용 returnStoredSource
$sort
숫자, 날짜, 문자열, 부울, UUID 및 objectID 필드를 정렬하려면
sort
단계와 함께 옵션을 사용합니다. 자세히$search
학습 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분