Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/

mongot 배포에 대한 리소스 할당 고려 사항

이 섹션에서는 mongot 배포서버 대한 중요한 계획 관련 질문에 답변하고 검색 아키텍처를 설계하기 위한 실행 가능한 단계를 제공합니다. 포괄적인 개요를 보려면 이 섹션을 선형적으로 읽으세요. 또는 이 섹션을 참조로 사용하고 필요에 따라 관련 섹션으로 건너뛸 수 있습니다. 이 섹션의 목표는 리소스 요구 사항을 정확하게 추정하고 강력한 배포서버 빌드 도움이 되는 것입니다.

데이터의 구조와 인덱스 정의는 디스크 사용량RAM 요구 사항의 프라이머리 동인입니다. 이 섹션을 사용하여 인덱스를 효율적으로 관리 데 필요한 최종 인덱스 크기와 메모리를 추정합니다.

1

디스크 공간 추정을 위한 점 으로 다음 공식을 사용합니다.

Estimated Index Size = (Number of Documents) x (Avg. Size of Indexed Text per Doc) x (Expansion Factor)

확장 계수 는 매우 중요하며 토큰화 전략에 따라 크게 달라집니다. 다음 승수를 가이드 로 사용하세요.

사용 사례
승수

표준/언어 토큰화

1.5x - 3x

키워드/단순 토큰화

1.1x - 1.5x

edgeGram (자동 완성)

5x - 8x

nGram(부분 일치)

8x - 15x+ (특히 minGram 값이 낮은 경우 이 값이 매우 클 수 있습니다.)

참고

위의 확장 계수 승수는 일반화된 예시 나타내며 모든 텍스트 기반 콘텐츠에 적용 않을 수 있습니다. 자체 데이터로 테스트하여 배포서버 대한 인덱스 계산을 결정해야 합니다.

2

벡터 검색 의 경우 인덱스 크기를 별도로 계산하여 총합에 추가합니다. 원시 벡터 데이터 크기는 이 값에 대한 합리적인 기준입니다.

Vector Index Size = (Total Number of Vectors) x (Vector Dimensions) x 4 bytes / dimension

참고

이 공식은 float32 벡터에 대한 공식입니다. 디스크의 최종 HNSW 인덱스에는 추가 오버헤드 발생합니다.

3
정적 매핑 사용
문서 구조를 예측할 수 없는 경우 동적 매핑을 비활성화합니다. 동적 매핑은 의도하지 않은 수천 개의 필드가 생성되어 과도한 RAM 소비하고 불안정을 유발하는 "매핑 폭발"로 이어질 수 있습니다. dynamic: false를 사용하여 인덱스 명시적으로 정의합니다. 자세히 학습 정적 및 동적 매핑을 참조하세요.
저장된 소스 필드 제한
검색 결과에 필요한 최소한의 필드 설정하다 만 mongot 인덱스 자체 내에 저장 . 프라이머리 MongoDB 컬렉션 에서 필드를 가져오는 것이 더 효율적이고 인덱스 에서 사용하는 디스크 공간을 줄이는 경우가 많습니다. 자세한 학습 은 MongoDB 검색 인덱스에 저장된 소스 필드 정의를 참조하세요.
대용량 메모리 기능 고려
동의어 컬렉션 과 깊게 중첩된 embeddedDocuments 는 상당한 메모리 아티팩트를 생성한다는 점에 유의하세요. 이러한 기능을 많이 사용하는 경우 mongot 프로세스 에 더 많은 Java 힙 공간을 할당해야 합니다.

쓰기(삽입, 업데이트, 삭제)의 속도와 유형에 따라 검색 인덱스 데이터베이스 와 동기화된 상태로 유지하는 데 필요한 CPU디스크 IOPS 가 결정됩니다.

쓰기 (write) 처리량 및 유지 관리를 위해 프로비저닝하려면 다음을 수행합니다.

1
높은 쓰기 속도(>1, 초당000 연산)
이 워크로드 는 CPU 바운드 및 I/O 바운드입니다. CPU 수가 많고 저장 가 빠른 서버를 프로비저닝합니다. mongot 프로세스의 CPU 사용률과 디스크 I/O 대기열 길이를 모니터링합니다. 이러한 지표 지속적으로 높고 복제 지연 증가하는 경우 hardware 확장하다 해야 합니다.
낮은 쓰기 속도(초당 <100 작업)
일반적으로 표준 hardware 구성으로 충분합니다.
2
인덱스 통합
단일 컬렉션 에 여러 개의 별도 검색 인덱스를 정의하지 마세요. 각 인덱스 오버헤드 추가합니다. 대신 포괄적인 단일 인덱스 정의를 만듭니다.
복합 뷰 구체화
복잡한 뷰를 인덱싱 하는 경우 변경 스트림 성능에 제약이 있을 수 있습니다. 에 대한 간단한 사전 집계 데이터 소스 인덱스 할 수 있도록 구체화된 뷰를 생성하는 mongot 것이 좋습니다.
3

인덱스 정의를 변경하면 전체 리소스 집약적인 재구축이 트리거됩니다.

다시 작성하면 쿼리 요청을 새 인덱스 로 전환하기 전에 이전 인덱스에 추가하여 새 인덱스 생성됩니다. 저장 실행 하지 않고 이 프로세스 수용하려면 항상 현재 인덱스 크기의 125% 이상을 디스크 여유 공간으로 사용할 수 있는지 확인하세요.

4

매우 까다로운 쓰기 (write) 워크로드의 경우 단일 mongot 노드 수직으로 확장 것만으로는 충분하지 않을 수 있습니다.

지속적인 쓰기 (write) 로드가 초당 10,000 작업을 초과할 것으로 예상되는 경우, 샤딩 가장 효과적인 확장 전략입니다. 샤드 당 최소 1 mongot 가 필요합니다. mongot 는 연결된 샤드 내에서만 컬렉션을 인덱싱하므로 인덱싱 부하를 수평으로 분산하는 데 도움이 됩니다.

쿼리 성능은 주로 처리 위한 CPU와 캐싱을 위한 RAM 의 함수입니다. 쿼리의 복잡성과 볼륨에 따라 지연 시간 목표를 충족하는 데 필요한 리소스가 결정됩니다.

쿼리 성능에 필요한 배포서버 크기를 추정하려면 다음을 수행합니다.

1

CPU 기준을 설정하려면 초당 쿼리 수(QPS) 목표를 사용합니다. 일반적인 점 모든 10 QPS에 대한1 CPU 코어입니다.

이 기준은 간단한 쿼리를 가정합니다. 복잡한 애그리게이션, 퍼지 매칭 또는 정규식 쿼리가 포함된 워크로드의 경우 코어당 2~5 QPS만 달성할 수 있습니다. 반대로 간단한 텀 일치는 코어당 20+ QPS를 산출할 수 있습니다. 항상 현실적인 쿼리 조합으로 성능을 테스트하세요.

2

RAM 빠른 쿼리에서 가장 중요한 요소입니다.

전문 검색
목표는 운영 체제의 파일 시스템 캐시 에 가능한 한 많은 인덱스 맞추는 것입니다. 최적의 성능을 위해 디스크에 있는 인덱스 의 총 크기와 일치하도록 mongot 노드 에 충분한 RAM 프로비저닝합니다. 이렇게 하면 느린 디스크 읽기가 최소화됩니다.
Vector Search
지연 시간이 짧은 벡터 검색 의 경우 HNSW 그래프 인덱스 메모리에 존재해야 합니다. 필요한 최소 RAM 계산하려면 인덱스 크기 추정 절차 의 단계를 사용하여 오버헤드를 위한 20~25%의 버퍼를 추가합니다. 벡터 인덱스 RAM 에 맞지 않으면 쿼리 지연 시간 늘어납니다.

참고

RAM 요구 사항을 줄이려면 벡터 양자화를 사용하는 것이 좋습니다. 벡터 양자화는 벡터 임베딩을 압축할 수 있으며, 이는 리콜이나 정밀도에 영향 최소화하면서 메모리 사용량(및 이를 저장하는 데 필요한 RAM )을 종종 낮춥니다.

돌아가기

아키텍처 패턴

이 페이지의 내용