MongoDB Academy · Lección

Sharding por zonas: asignación de datos a regiones

Definirá zonas en rangos de claves de shard y las asignará a shards, permitiendo la residencia de datos y la partición geográfica.

Lección 4 de 413 pasos

Sharding por zonas: asignación de datos a regiones es una lección gratuita de MongoDB Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de MongoDB Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué es el zone sharding?

El zone sharding (anteriormente, sharding compatible con etiquetas) permite asignar rangos específicos de la clave de shard a grupos designados de shards llamados zonas. Los documentos cuya clave de shard se encuentra dentro del rango de una zona se almacenan únicamente en los shards pertenecientes a esa zona. Esto permite la residencia geográfica de los datos, la afinidad con niveles de hardware y el aislamiento de cargas de trabajo dentro de un único clúster fragmentado.

Principales casos de uso del zone sharding

El zone sharding resuelve varios problemas de producción: Residencia de datos: los requisitos del RGPD de la UE exigen que los datos de los usuarios europeos permanezcan en centros de datos de la UE. Almacenamiento por niveles: mantenga los datos recientes y de acceso frecuente en shards con NVMe, y los datos antiguos de archivo en shards más lentos y económicos. Aislamiento de inquilinos: en una aplicación SaaS multiinquilino, fije los datos de cada cliente empresarial en shards dedicados para evitar el efecto de vecino ruidoso.

Paso 1: Etiquetar los shards con nombres de zona

El primer paso consiste en asignar una etiqueta de zona a uno o varios shards. Un shard puede pertenecer a varias zonas. Las etiquetas son simplemente cadenas arbitrarias que usted elige. Una vez etiquetado, el balanceador solo moverá los chunks asignados a una etiqueta de zona a shards que tengan esa misma etiqueta.

// Tag shards with geographic zones
sh.addShardTag('shard-eu-west-1', 'EU')
sh.addShardTag('shard-eu-central-1', 'EU')
sh.addShardTag('shard-us-east-1', 'US')
sh.addShardTag('shard-us-west-2', 'US')

Paso 2: Definir los rangos de la clave de shard para las zonas

A continuación, defina qué rangos de la clave de shard corresponden a cada zona mediante sh.addTagRange(). Esto indica al balanceador: «todos los documentos cuya clave de shard se encuentre en este rango deben residir en shards etiquetados con esta zona». Use MinKey y MaxKey como límites de rango abiertos.

// Assign EU shard key range to EU zone
sh.addTagRange(
  'mydb.users',
  { region: 'EU', userId: MinKey },
  { region: 'EU', userId: MaxKey },
  'EU'
)

// Assign US shard key range to US zone
sh.addTagRange(
  'mydb.users',
  { region: 'US', userId: MinKey },
  { region: 'US', userId: MaxKey },
  'US'
)

Diseño de la clave de shard para el zone sharding

El zone sharding requiere una clave de shard compuesta cuyo primer componente sea el discriminador de zona (por ejemplo, region, tenantId, tier). El segundo componente proporciona granularidad dentro de la zona para realizar divisiones adicionales. Ejemplo: { region: 1, userId: 1 }: region dirige los datos a la zona correcta; userId permite dividir los chunks con mayor precisión dentro de cada zona.

// Shard the collection with a zone-aware compound key
sh.enableSharding('mydb')
sh.shardCollection('mydb.users', { region: 1, userId: 1 })

El balanceador impone la pertenencia a las zonas

Una vez configuradas las zonas, el balanceador impone continuamente la pertenencia a estas. Si un chunk cuya clave se encuentra en el rango de la zona de la UE termina en un shard de EE. UU. (por ejemplo, después de añadir un shard o cambiar las definiciones de las zonas), el balanceador lo migra a un shard de la UE. Esta migración se produce automáticamente durante la siguiente ronda del balanceador.

// Monitor that chunks are on the correct zone shards
use config
db.chunks.find(
  { ns: 'mydb.users', 'min.region': 'EU' },
  { shard: 1, min: 1 }
)
// All returned chunks should be on EU-tagged shards

Almacenamiento por niveles: zonas de acceso frecuente y de archivo

El zone sharding permite implementar almacenamiento por niveles: asigne los datos recientes (por ejemplo, los del mes actual) a una zona de acceso frecuente en shards respaldados por NVMe rápidos, y los datos antiguos a una zona de archivo en shards respaldados por HDD más lentos. A medida que los datos envejecen, puede actualizar las asignaciones de rangos de las zonas para que el balanceador migre gradualmente los chunks antiguos de la zona de acceso frecuente a la zona de archivo.

// Tiered storage by age
sh.addShardTag('shard01', 'HOT')
sh.addShardTag('shard02', 'COLD')

sh.addTagRange('mydb.events',
  { year: 2025, _id: MinKey },
  { year: 2025, _id: MaxKey },
  'HOT'
)
sh.addTagRange('mydb.events',
  { year: 2024, _id: MinKey },
  { year: 2024, _id: MaxKey },
  'COLD'
)

Eliminar y actualizar rangos de zonas

Las asignaciones de rangos de las zonas pueden actualizarse a medida que cambian las necesidades del negocio. Elimine un rango existente con sh.removeTagRange() y añada uno nuevo. A continuación, el balanceador migrará los chunks afectados para ajustarse a la nueva asignación. Así puede trasladar mensualmente los datos de una zona de acceso frecuente a una zona de archivo.

// Remove an old zone range
sh.removeTagRange(
  'mydb.events',
  { year: 2024, _id: MinKey },
  { year: 2024, _id: MaxKey },
  'HOT'
)

// Add it to COLD zone instead
sh.addTagRange('mydb.events',
  { year: 2024, _id: MinKey },
  { year: 2024, _id: MaxKey },
  'COLD'
)

Consultar con claves de shard conscientes de las zonas

Al utilizar una clave de shard compuesta consciente de las zonas, como { region: 1, userId: 1 }, las consultas que incluyen el campo region se dirigen automáticamente a los shards de la zona correcta. Esto ofrece tanto cumplimiento de los requisitos de residencia de datos como rendimiento de las consultas: las consultas de la UE nunca acceden a shards de EE. UU.

// Query from a EU service — targeted to EU shards only
const user = await db.users.findOne({ region: 'EU', userId: 'u789' })
// mongos routes this to EU-tagged shards only — data never
// leaves EU-region shards even for the query itself

Limitaciones y advertencias

El zone sharding tiene algunas limitaciones importantes: 1) solo funciona con sharding por rangos (no con sharding hash usando un único campo). 2) Los documentos que no estén cubiertos por ningún rango de zona pueden balancearse a cualquier shard; asegúrese de que sus rangos cubran todos los valores posibles usando MinKey y MaxKey. 3) La migración de zonas puede tardar en colecciones grandes; planifique las migraciones durante periodos de poco tráfico.

// Ensure all documents are covered by a zone
// Uncovered ranges can land on any shard
sh.addTagRange('mydb.users',
  { region: MinKey, userId: MinKey },  // catch-all
  { region: 'EU', userId: MinKey },
  'US'  // everything before EU goes to US zone
)

Inspeccionar la configuración de las zonas

Puede inspeccionar la configuración actual de las zonas en cualquier momento. Las etiquetas de zona se almacenan en las colecciones config.shards y config.tags del servidor de configuración. sh.status() muestra la información de las zonas junto con la distribución de los chunks, lo que facilita comprobar que el balanceador ha aplicado correctamente la pertenencia a las zonas.

// View all zone ranges configured for a collection
use config
db.tags.find({ ns: 'mydb.users' })

// Full cluster and zone overview
sh.status()
// Shows: zones, shards in each zone, chunks per shard

Comprobación rápida

Compruebe su comprensión de los conceptos de MongoDB y las bases de datos NoSQL de esta lección.

Resumen de la lección

En esta lección ha aprendido que el zone sharding fija los rangos de la clave de shard a shards etiquetados para proporcionar residencia de datos y aislamiento de cargas de trabajo, que se requiere una clave de shard compuesta cuyo primer campo sea un discriminador de zona y que el balanceador impone automáticamente la pertenencia a las zonas y migra los chunks cuando cambian las asignaciones de las zonas. A continuación, exploraremos el ajuste del rendimiento y el profiler de la base de datos.

Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Sharding por zonas: asignación de datos a regiones» es gratis?

Sí — el texto completo de «Sharding por zonas: asignación de datos a regiones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de MongoDB Academy, actualiza a CoddyKit PRO. El curso de MongoDB Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Sharding por zonas: asignación de datos a regiones»?

Definirá zonas en rangos de claves de shard y las asignará a shards, permitiendo la residencia de datos y la partición geográfica. Practicas MongoDB Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar MongoDB Academy?

No se requiere experiencia previa. MongoDB Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Sharding por zonas: asignación de datos a regiones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de MongoDB Academy?

Sí. Cada lección de MongoDB Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos de sharding: chunks, balancer y claves de shard
  2. Elección de una clave de shard: cardinalidad, frecuencia y monotonía
  3. Estrategias de sharding por rangos frente a hash
  4. Sharding por zonas: asignación de datos a regiones
← Volver a MongoDB Academy