Las colecciones en el mismo conjunto de réplicas pueden experimentar cuellos de botella de rendimiento al competir por recursos. A medida que los datos superan la memoria disponible, el aumento de la E/S de disco genera latencia y sobrecarga los recursos del sistema, lo que reduce el rendimiento general de la aplicación. Aislar las colecciones en fragmentos dedicados dentro del clúster reduce estas limitaciones de recursos, manteniendo al mismo tiempo un único punto de conexión para la aplicación.
Beneficios del aislamiento de colecciones:
Separación de carga de trabajo: evite la contención de recursos asignando colecciones a fragmentos específicos.
Optimización de hardware: configurar Fragmentos asimétricos 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: reduzca el tiempo de recuperación aislando fallas potenciales.
Cuándo usarlo moveCollection
Mover colecciones en fragmentos dedicados es particularmente beneficioso cuando los requisitos de sus colecciones varían de las siguientes maneras:
Requisito | Descripción |
|---|---|
Patrones de acceso | Algunas de sus colecciones requieren mucha lectura, mientras que otras requieren mucha escritura. |
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 permiten ubicar estratégicamente cualquier colección no fragmentada en cualquier fragmento del clúster. Anteriormente, las colecciones no fragmentadas estaban restringidas al fragmento principal de su base de datos, lo que generaba cuellos de botella en los recursos. Mover una colección simplifica el escalado horizontal, ya que permite reubicar colecciones no fragmentadas sin interrumpir las cargas de trabajo.
Si bien no es necesario fragmentar todas las colecciones, implementar un clúster fragmentado ofrece ventajas de escalabilidad horizontal incluso para colecciones no fragmentadas. 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 al mover colecciones no fragmentadas entre fragmentos:
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 podrían necesitar almacenar datos de usuarios en regiones geográficas específicas para cumplir con las regulaciones de soberanía de datos. Con moveCollection, puede colocar colecciones no fragmentadas en fragmentos de diferentes regiones y reubicarlas según evolucionen los requisitos regulatorios.
Cost Optimization
Antes de MongoDB 8.0, todas las colecciones no fragmentadas de una base de datos estaban restringidas al fragmento principal. Esta limitación solía obligar a actualizar a niveles de instancia más grandes y costosos. MongoDB 8.0 elimina esta restricción, lo que permite el movimiento de colecciones no fragmentadas entre todos los fragmentos disponibles del clúster.
Mover colecciones no fragmentadas entre hardware de fragmentos asimétricos ofrece importantes ventajas para la optimización de recursos, ya que permite ubicar colecciones específicas en hardware adaptado a sus necesidades. Al asignar las colecciones a los recursos de hardware adecuados, se pueden escalar diferentes cargas de trabajo de forma independiente según sus necesidades reales. Este enfoque específico mejora el rendimiento y evita el coste de sobreaprovisionar recursos en todo el clúster.
Densidad de recolección reducida
Aunque MongoDB no tiene un límite estricto 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, consulte Límites de colecciones e índices.
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.
Ubicación conjunta estratégica
Considere la posibilidad de coubicar colecciones no fragmentadas en el mismo fragmento para minimizar las operaciones distribuidas, como las transacciones entre colecciones o las operaciones de unión$lookup (). Mantener las operaciones relacionadas confinadas en un solo fragmento elimina la sobrecarga de la red, reduce la latencia y mejora el rendimiento general. Este enfoque es especialmente eficaz para colecciones que se unen o a las que se accede frecuentemente 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 su uso 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 usa MongoDB Search, tenga en cuenta que moveCollection utiliza la re-fragmentación para reescribir la colección en un fragmento diferente. Después de mover la colección, deberá reconstruir manualmente su índice de MongoDB Search. Hasta que los índices se reconstruyan por completo, la funcionalidad de MongoDB Search no estará disponible para esta colección específica, aunque el resto de la 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.