Las colecciones en el mismo set de réplicas pueden encontrar cuellos de botella en el rendimiento al competir por recursos. A medida que tus datos crecen más allá de la memoria disponible, el aumento de la E/S en disco introduce latencia y genera presión sobre los recursos del sistema, lo que degrada el rendimiento general de la aplicación. Aislar las colecciones en particiones dedicadas dentro de tu clúster reduce estas restricciones de recursos mientras mantiene un único punto de conexión para tu aplicación.
Beneficios del aislamiento de colecciones:
Separación de cargas de trabajo: Evita la competencia por recursos asignando colecciones a particiones específicos.
Optimización de hardware: configurar particiones asimétricas con hardware adaptado a requisitos de colección específicos.
Escalamiento independiente: escale las colecciones individualmente según el crecimiento de la carga de trabajo.
Resiliencia mejorada - Reduce el tiempo de recuperación aislando posibles fallas.
Cuándo usar moveCollection
Mover las colecciones en particiones dedicadas es particularmente beneficioso cuando los requisitos de su colección varían de las siguientes maneras:
Requisito | Descripción |
|---|---|
Patrones de acceso | Algunas de tus colecciones requieren mayor lectura, mientras que otras requieren muchas operaciones de guardado. |
Rendimiento | Algunas colecciones requieren más RAM, CPU o rendimiento de disco que otras. |
Demandas de escalabilidad | Las colecciones que tienen patrones de crecimiento rápido o impredecible requieren hardware dedicado. |
La asignación de colecciones a fragmentos con el hardware necesario para satisfacer sus requisitos específicos optimiza el rendimiento y mantiene la simplicidad operativa.
Cuándo mover colecciones no particionadas
A partir de MongoDB 8.0, las colecciones móviles te permiten colocar estratégicamente cualquier colección sin partición en cualquier partición dentro del clúster. Anteriormente, las colecciones no particionadas estaban restringidas a la partición primaria de su base de datos, lo que provocaba cuellos de botella en los recursos. Mover una colección simplifica la escalabilidad horizontal al permitirte reubicar colecciones no fragmentadas sin interrumpir las cargas de trabajo.
Aunque no todas las colecciones necesitan ser particionadas, implementar un clúster proporciona ventajas de escalado horizontal incluso para colecciones no particionadas. Este enfoque mantiene un único punto de conexión para todo el acceso a los datos, lo que simplifica la arquitectura de la aplicación.
Los siguientes escenarios se benefician de mover colecciones no fragmentadas entre particiones:
Aislamiento de cargas de trabajo
Cuando varias colecciones atienden distintas cargas de trabajo dentro del mismo clúster, mover las colecciones no fragmentadas entre diferentes fragmentos ayuda a evitar la contención de recursos. Esta separación elimina los problemas en los que el rendimiento de una carga de trabajo afecta negativamente a las demás.
Arquitectura multitenant
En entornos que alojan colecciones para diferentes tenants, el comando moveCollection de MongoDB permite la distribución sin interrupciones de colecciones en las particiones sin tiempo de inactividad. Esta flexibilidad permite optimizar la asignación de recursos según las necesidades específicas de cada tenant.
Distribución de datos geográficos
Las organizaciones pueden necesitar almacenar datos de usuarios en regiones geográficas específicas para cumplir con las regulaciones de soberanía de datos. Con moveCollection, puedes ubicar colecciones no fragmentadas en particiones de diferentes regiones y reubicarlas a medida que evolucionan los requisitos normativos.
Cost Optimization
Antes de MongoDB 8.0, todas las colecciones no particionadas dentro de una base de datos estaban restringidas a la partición primaria. Esta limitación a menudo obligaba a actualizar a niveles de instancias más grandes y costosas. MongoDB 8.0 remueve esta restricción, permitiendo el movimiento de colecciones no fragmentadas a través de todas las particiones disponibles en el clúster.
Mover colecciones no fragmentadas a través de hardware partición asimétrica proporciona beneficios significativos para la optimización de recursos, permitiéndote ubicar colecciones específicas en hardware adaptado a sus requisitos. Al asignar colecciones a recursos de hardware adecuados, puedes escalar diferentes cargas de trabajo de forma independiente según sus necesidades reales. Este enfoque dirigido mejora el rendimiento evitando el costo de provisionamineto de recursos en exceso en todo el clúster.
Densidad de colección reducida
Si bien MongoDB no impone un límite estricto en la cantidad de colecciones por instancia, el rendimiento se degrada cuando un nodo gestiona demasiadas colecciones e índices. Para obtener más información sobre estos límites, consulta Límites de colección e índice.
Al distribuir colecciones no fragmentadas en diferentes fragmentos, puede reducir la densidad de recopilación en cualquier nodo individual y, al mismo tiempo, mantener un punto de acceso unificado para las aplicaciones.
Co-ubicación estratégica
Considera alojar colecciones no particionadas en la misma partición para minimizar las operaciones distribuidas, como las transacciones entre colecciones o las operaciones de join ($lookup). Mantener las operaciones relacionadas confinadas a una única partición elimina la sobrecarga de la red, reduce la latencia y mejora el rendimiento general. Este enfoque es especialmente eficaz para colecciones que se suelen combinar o a las que se accede juntas en la misma transacción.
Sintaxis del comando
sh.moveCollection("database.collection", "shardName")
El siguiente ejemplo mueve cuatro colecciones no fragmentadas entre dos fragmentos para lograr una distribución equitativa de las colecciones:
db.adminCommand({moveCollection:"E", toShard: "shard1"})
Cuándo evitar el uso de moveCollection
Si bien moveCollection ofrece una flexibilidad significativa, hay algunos escenarios específicos en los que puede no ser la solución óptima:
Grandes colecciones
No uses moveCollection cuando una colección es demasiado grande para una sola partición. Considera particionar una colección cuando se acerque a 3 TB en tamaño.
Colecciones con índices de búsqueda de MongoDB
Si una colección específica utiliza MongoDB Search, tenga en cuenta que moveCollection utiliza resharding para reescribir la colección en otra partición. Después de mover la colección, tendrás que reconstruir manualmente su índice MongoDB Search. Hasta que los índices no se reconstruyan completamente, la funcionalidad de MongoDB Search no estará disponible para esta colección específica, aunque el resto de tu aplicación funcionará con normalidad.
Antes de utilizar moveCollection, evalúe estas limitaciones frente a los requisitos de su aplicación para determinar si es la solución adecuada.