Docs Menu
Docs Home
/ /

Construya una arquitectura multiinquilino para MongoDB Vector Search

Puede implementar la multi-tenencia con MongoDB Vector Search para que una sola instancia de una aplicación sirva a múltiples inquilinos. Esta página describe recomendaciones de diseño específicas para MongoDB Vector Search. Estas recomendaciones difieren de las nuestras. Recomendaciones de múltiples tenencias para Atlas.

Consulte las siguientes recomendaciones al diseñar una arquitectura multiinquilino para MongoDB Vector Search.

Importante

Esta guía asume que puede ubicar a los inquilinos dentro de una sola propiedad. VPC. De lo contrario, deberá mantener proyectos separados para cada inquilino, lo cual no recomendamos en MongoDB Vector Search.

Recomendamos almacenar todos los datos de los inquilinos en una sola colección, así como en una única base de datos y clúster. Puede distinguir entre inquilinos incluyendo un tenant_id Campo dentro de cada documento. Este campo puede ser cualquier identificador único del inquilino, como un UUID o el nombre del inquilino. Puede usarlo como prefiltro en sus índices y consultas de MongoDB Vector Search.

Este enfoque centralizado ofrece los siguientes beneficios:

  • Fácil de modelar y escalar.

  • Simplifica las operaciones de mantenimiento.

  • Enrutamiento eficiente de consultas mediante filtrado previo por tenant_id.

    Nota

    Se le garantiza que no atenderá a inquilinos que no coincidan con este filtro.

No recomendamos almacenar cada inquilino en una colección o base de datos diferente por las siguientes razones:

  • Impacto en el rendimiento: este enfoque puede generar diferentes cambiar las cargas de transmisión en función de la cantidad de recopilaciones, lo que podría afectar negativamente el rendimiento y las capacidades de monitoreo.

  • Sin aislamiento adicional: Las garantías de aislamiento de datos en Atlas se aplican a nivel de base de datos. El uso de colecciones separadas dentro de la misma base de datos no ofrece ningún beneficio adicional de aislamiento de datos. El uso de bases de datos independientes introduce complejidad operativa sin ventajas significativas de seguridad en la mayoría de los casos de uso.

En su lugar, utilice una sola colección para todos los inquilinos. Para ver un ejemplo de cómo migrar de un modelo de colección por inquilino a uno de colección única, consulte Migración desde un modelo de colección por inquilino.

Considere las siguientes estrategias para mitigar posibles problemas de rendimiento con el enfoque recomendado.

Si experimentas problemas de rendimiento por la distribución desigual de datos (algunos inquilinos grandes y muchos inquilinos pequeños), utiliza las vistas de MongoDB para separar los inquilinos grandes de los inquilinos más pequeños:

  • Grandes inquilinos (Top 1%):

    • Cree una vista para cada inquilino grande.

    • Crea un índice para cada vista.

    • Mantenga un registro de inquilinos grandes que verifique en el momento de la consulta para dirigir las consultas en consecuencia.

  • Pequeños inquilinos (inquilinos restantes):

    • Cree una vista única para todos los pequeños inquilinos.

    • Construya un índice único para esta vista.

    • Utilice el campo tenant_id como prefiltro para enrutar las consultas en consecuencia.

El siguiente ejemplo demuestra cómo crear vistas para inquilinos grandes y pequeños mongosh mediante:

Mantenga un registro de sus inquilinos grandes y sus valores tenant_id correspondientes y luego cree una vista para cada uno de estos inquilinos:

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

Cree una vista para los inquilinos pequeños y filtre los inquilinos grandes:

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

Después de crear las vistas, cree los índices para cada una. Verifique lo siguiente:

  • Al especificar el nombre de la colección para el índice, utilice el nombre de la vista en lugar del nombre de la colección original.

  • Asegúrese de que su índice en la vista de inquilino pequeño incluya el campo tenant_id como filtro previo.

Consulte la página Crear índices para obtener instrucciones sobre cómo crear índices.

Si tiene muchos inquilinos, cada uno con una gran cantidad de vectores, considere usar un sistema basado en particiones distribuyendo los datos entre fragmentos.

Puede usar el tenant_id campo como clave de fragmentación para distribuir los datos en rangos específicos según el ID del inquilino. Para obtener más información, consulte Fragmentación por rangos.

Para migrar de un modelo de colección por inquilino a un modelo de colección única, procese cada colección de inquilino e inserte los documentos en una nueva colección.

Volver

Recomendaciones adicionales

En esta página