Docs Menu
Docs Home
/
Atlas
/

Atlas Vector Search를 위한 멀티 테넌트 아키텍처 구축ㄱ

이 페이지의 내용

  • 권장 사항
  • 모든 테넌트를 위한 단일 컬렉션
  • 테넌트당 하나의 컬렉션
  • 고려 사항
  • 테넌트 크기 불일치
  • 다수의 대형 테넌트
  • Collection-Per-Tenant 모델에서의 마이그레이션

Atlas Vector Search로 멀티 테넌시를 구현하여 애플리케이션의 단일 인스턴스가 여러 테넌트를 지원하도록 할 수 있습니다. 이 페이지는 Atlas Vector Search에 특별히 적용되는 디자인 권장사항을 설명합니다. 이 권장사항은 Atlas에 대한 멀티테넌시 권장사항과 다릅니다.

Atlas Vector Search의 멀티테넌트 아키텍처를 설계할 때 다음 권장사항을 참조하세요.

중요

이 지침에서는 단일 VPC 내에 테넌트를 배치할 수 있다고 가정합니다. 그렇지 않으면 각 테넌트에 대해 별도의 프로젝트를 유지 관리해야 하므로 Atlas Vector Search를 권장하지 않습니다.

모든 테넌트 데이터를 단일 컬렉션에 저장하고, 또한 단일 데이터베이스와 클러스터에 저장할 것을 권장합니다. 각 문서에 tenant_id 필드를 포함하여 테넌트를 구분할 수 있습니다. 이 필드는 UUID 또는 테넌트 이름과 같은 테넌트의 고유 식별자일 수 있습니다. 이 필드를 Atlas Vector Search 인덱스 및 쿼리에서 사전 필터로 사용할 수 있습니다.

이 중앙 집중식 접근 방식은 다음과 같은 이점을 제공합니다.

  • 모델링 및 확장 용이

  • 유지 관리 작업 간소화

  • tenant_id를 사용한 사전 쿼리 필터링으로 효율적인 쿼리 라우팅

    참고

    이 필터와 일치하지 않는 테넌트에게는 데이터가 제공되지 않도록 보장됩니다.

각 테넌트를 별도의 컬렉션에 저장하지 않는 것이 좋습니다. 이 접근 방식을 사용하면 컬렉션 수에 따라 변경 스트림 부하가 달라질 수 있기 때문입니다. 이는 성능과 모니터링 기능에 부정적인 영향을 미칠 수 있습니다. Atlas의 데이터 격리 보장은 데이터베이스 수준에서 적용되므로 여러 컬렉션을 사용해도 추가적인 데이터 격리 이점은 없습니다.

대신 모든 테넌트를 위한 단일 컬렉션을 사용하는 것이 좋습니다. 테넌트당 하나의 컬렉션 모델에서 단일 컬렉션 모델로 마이그레이션하는 방법의 예시는 테넌트당 하나의 컬렉션 모델에서 마이그레이션하기를 참조하세요.

권장되는 접근 방식에서 발생할 수 있는 성능 문제를 완화하려면 다음과 같은 전략들을 고려해 보세요.

데이터가 고르게 분포되지 않아 성능 문제가 발생하는 경우(일부 테넌트는 크고 대부분은 작은 경우), MongoDB 뷰를 사용하여 대형 테넌트와 소형 테넌트를 분리합니다.

  • 대형 테넌트(상위 1%):

    • 각 대형 테넌트에 대해 뷰 생성

    • 각 뷰에 대해 인덱스 생성

    • 쿼리 시점에 확인할 대형 테넌트의 기록을 유지하여 쿼리를 적절히 라우팅

  • 소형 테넌트(잔여 테넌트):

    • 모든 소형 테넌트에 대해 단일 뷰 생성

    • 해당 뷰에 대해 단일 인덱스 빌드

    • tenant_id 필드를 사전 필터로 사용해 쿼리를 적절히 라우팅

다음 예시는 mongosh를 사용하여 대규모 및 소형 테넌트에 대한 뷰를 만드는 방법을 보여줍니다.

대형 테넌트와 해당 tenant_id 값을 기록하고, 각 테넌트에 대한 뷰 생성:

db.createView(
"<viewName>",
"<collectionName>",
[
{
"$match": {
"tenant_id": "<largeTenantId>"
}
}
]
)

대형 테넌트를 필터링하여 소형 테넌트에 대한 뷰를 만듭니다.

db.createView(
"<viewName>",
"<collectionName>",
[
{
"$match": {
"tenant_id": {
"$nin": [ "<largeTenantId1>", "<largeTenantId2>", ... ]
}
}
}
]
)

뷰를 생성한 후 각 뷰에 대해 인덱스를 만듭니다. 다음을 확인하세요:

  • 인덱스의 컬렉션 이름을 지정할 때는 원래 컬렉션 이름 대신 뷰 이름을 사용해야 합니다.

  • 소형 테넌트 보기의 인덱스에 tenant_id 필드를 사전 필터로 포함해야 합니다.

인덱스를 만드는 방법에 대한 지침은 인덱스 생성 페이지를 참조하세요.

여러 테넌트가 각각 많은 벡터를 가지고 있는 경우, 데이터를 샤드에 분산하여 파티션 기반 시스템을 사용하는 것을 고려하세요.

tenant_id 필드를 샤드 키로 사용하면 테넌트 ID를 기준으로 특정 범위에 데이터를 분산할 수 있습니다. 자세한 내용은 샤딩 범위 지정을 참조하세요.

테넌트당 하나의 컬렉션 모델에서 단일 컬렉션 모델로 마이그레이션하려면 각 테넌트 컬렉션을 처리하고 새 컬렉션에 문서를 삽입합니다.

돌아가기

성능 개선