Docs Menu
Docs Home
/ /
Zones

Segmentación de datos por ubicación

En clústeres fragmentados, puedes crear Zonas de datos fragmentados según la clave de fragmento. Puede asociar cada zona con uno o más fragmentos del clúster. Un fragmento puede asociarse con cualquier número de zonas. En un clúster equilibrado, MongoDB migra los fragmentos cubiertos por una zona únicamente a los fragmentos asociados a ella.

Tip

Al definir las zonas y sus rangos antes de fragmentar una colección vacía o inexistente, la operación de recopilación de fragmentos crea fragmentos para los rangos de zona definidos, así como fragmentos adicionales para cubrir todo el rango de valores de clave de fragmento, y realiza una distribución inicial de fragmentos basada en los rangos de zona. Esta creación y distribución inicial de fragmentos permite una configuración más rápida de la fragmentación por zonas. Tras la distribución inicial, el balanceador gestiona la distribución de fragmentos en adelante.

Consulte Zonas predefinidas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.

Este tutorial utiliza zonas para segmentar datos según un área geográfica.

Los siguientes son algunos ejemplos de casos de uso para segmentar datos por área geográfica:

  • Una aplicación que tiene que segmentar los datos de los usuarios por país

  • Una base de datos que debe asignar recursos por país

El siguiente diagrama ilustra un clúster fragmentado que utiliza zonas geográficas para administrar y satisfacer los requisitos de segmentación de datos.

Diagrama de distribución geográfica según zonas

Una aplicación de chat financiero registra los mensajes y rastrea el país del usuario de origen. La aplicación almacena los registros en... chat Base de datos de la colección messages. Los chats contienen información que debe segmentarse por país para que los servidores locales atiendan las solicitudes de lectura y escritura de sus usuarios. Se puede asignar la misma zona a un grupo de países para compartir recursos.

La aplicación actualmente tiene usuarios en EE. UU., Reino Unido y Alemania. El country campo representa el país del usuario según su ISO 3166-1 Alpha-.2 códigos de país de dos caracteres.

Los siguientes documentos representan una vista parcial de tres mensajes de chat:

{
"_id" : ObjectId("56f08c447fe58b2e96f595fa"),
"country" : "US",
"userid" : 123,
"message" : "Hello there",
...,
}
{
"_id" : ObjectId("56f08c447fe58b2e96f595fb"),
"country" : "UK",
"userid" : 456,
"message" : "Good Morning"
...,
}
{
"_id" : ObjectId("56f08c447fe58b2e96f595fc"),
"country" : "DE",
"userid" : 789,
"message" : "Guten Tag"
...,
}

La colección messages utiliza el índice compuesto { country : 1, userid : 1 } como clave de fragmento.

El campo country en cada documento permite crear una zona para cada valor de país distinto.

El userid campo proporciona una cardinalidad alta y un componente de frecuencia baja a la clave del fragmento en relación country con.

Consulte Cómo elegir una clave de fragmento para obtener instrucciones más generales sobre cómo seleccionar una clave de fragmento.

El clúster fragmentado tiene fragmentos en dos centros de datos: uno en Europa y otro en América del Norte.

Diagrama de zonas utilizadas para soportar la arquitectura de distribución geográfica

Esta aplicación requiere una zona por centro de datos.

EU - Centro de datos europeo

Los fragmentos implementados en este centro de datos se asignan a la zona EU.

Para cada país que utilice el centro de datos EU para lecturas y escrituras locales, cree un rango de zona para la zona EU con:

  • un límite inferior de { "country" : <country>, "userid" : MinKey }

  • un límite superior de { "country" : <country>, "userid" : MaxKey }

NA - Centro de datos de América del Norte

Los fragmentos implementados en este centro de datos se asignan a la zona NA.

Para cada país que utilice el centro de datos NA para lecturas y escrituras locales, cree un rango de zona para la zona NA con:

  • un límite inferior de { "country" : <country>, "userid" : MinKey }

  • un límite superior de { "country" : <country>, "userid" : MaxKey }

Nota

Los MinKey valores y son valores especiales reservados para comparaciones MaxKey

Con zonas, si un documento insertado o actualizado coincide con una zona configurada, solo se puede escribir en un fragmento dentro de esa zona.

MongoDB puede guardar documentos que no coinciden con una zona configurada en cualquier partición del clúster.

Nota

El comportamiento descrito anteriormente requiere que el clúster esté en un estado estable, sin fragmentos que violen una zona configurada. Consulta la siguiente sección sobre el balanceador para obtener más información.

MongoDB puede enrutar consultas a un fragmento específico si la consulta incluye al menos el campo country.

Por ejemplo, MongoDB puede intentar una operación de lectura específica en la siguiente consulta:

chatDB = db.getSiblingDB("chat")
chatDB.messages.find( { "country" : "UK" , "userid" : "123" } )

Las consultas sin el country campo realizan operaciones de transmisión.

El balanceador migra los fragmentos al fragmento correspondiente respetando las zonas configuradas. Hasta la migración, los fragmentos pueden contener fragmentos que infrinjan las zonas configuradas. Una vez completado el balanceo, los fragmentos solo deben contener fragmentos cuyos rangos no infrinjan las zonas asignadas.

Añadir o eliminar zonas o rangos de zonas puede provocar migraciones de fragmentos. Según el tamaño del conjunto de datos y la cantidad de fragmentos afectados por una zona o rango de zonas, estas migraciones pueden afectar el rendimiento del clúster. Considere ejecutar el balanceador durante períodos programados específicos. Consulte "Programar el período de balanceo" para obtener un tutorial sobre cómo configurar un período de programación.

Para los clústeres fragmentados que se ejecutan clusterManager con admin control de acceso basado en roles en implementaciones autoadministradas, autentíquese como un usuario con al menos el rol en la base de datos.

Debe estar conectado a un para crear zonas y rangos de zonas. No puede crear zonas ni rangos de zonas conectándose directamente a mongos un shard.

1

Para reducir el impacto en el rendimiento, se puede deshabilitar el balanceador en todo el clúster fragmentado para garantizar que no se realicen migraciones mientras se configuran las nuevas zonas.

Utilice para detener el balanceador del sh.stopBalancer() clúster.

sh.stopBalancer()

Utilice para comprobar si el proceso de balanceo está en ejecución. Espere a que se completen las rondas de balanceo actuales antes de sh.isBalancerRunning() continuar.

2

Agregue cada fragmento del centro de datos de América del Norte a la zona NA.

sh.addShardTag(<shard name>, "NA")

Agregue cada fragmento del centro de datos europeo a la zona EU.

sh.addShardTag(<shard name>, "EU")

Puede revisar las zonas asignadas a cualquier fragmento determinado sh.status() ejecutando.

3

Para valores de clave de fragmento country : US donde, defina un rango de clave de fragmento y asócielo a la NA zona mediante el método. Este método sh.addTagRange() requiere:

  • El espacio de nombres completo de la colección de destino.

  • El límite inferior inclusivo del rango.

  • El límite superior exclusivo del rango.

  • El nombre de la zona.

sh.addTagRange(
"chat.messages",
{ "country" : "US", "userid" : MinKey },
{ "country" : "US", "userid" : MaxKey },
"NA"
)

Para valores de clave de fragmento country : UK donde, defina un rango de clave de fragmento y asócielo a la EU zona mediante el método. Este método sh.addTagRange() requiere:

  • El espacio de nombres completo de la colección de destino.

  • El límite inferior inclusivo del rango.

  • El límite superior exclusivo del rango.

  • El nombre de la zona.

sh.addTagRange(
"chat.messages",
{ "country" : "UK", "userid" : MinKey },
{ "country" : "UK", "userid" : MaxKey },
"EU"
)

Para valores de clave de fragmento country : DE donde, defina un rango de clave de fragmento y asócielo a la EU zona mediante el método. Este método sh.addTagRange() requiere:

  • El espacio de nombres completo de la colección de destino.

  • El límite inferior inclusivo del rango.

  • El límite superior exclusivo del rango.

  • El nombre de la zona.

sh.addTagRange(
"chat.messages",
{ "country" : "DE", "userid" : MinKey },
{ "country" : "DE", "userid" : MaxKey },
"EU"
)

Los valoresMinKeyyMaxKeyson valores especiales reservados para comparaciones. MinKeysiempre se compara como inferior a cualquier otro valor posible, mientras queMaxKeysiempre se compara como superior a cualquier otro valor posible. Los rangos configurados capturan a todos los usuarios para cada device.

Tanto country : UK como country : DE se asignan a la zona EU. Esto asocia cualquier documento con UK o DE como valor para country al centro de datos de la UE.

4

Si el balanceador se deshabilitó en los pasos anteriores, vuelva a habilitarlo al finalizar este procedimiento para reequilibrar el clúster.

sh.enableBalancing()Utilice, que especifica el espacio de nombres de la colección, para iniciar el equilibrador.

sh.enableBalancing("chat.message")

Utiliza sh.isBalancerRunning() para comprobar si el proceso del balanceador se está ejecutando actualmente.

5

La próxima vez que se ejecute el balanceador, dividirá los fragmentos donde sea necesario y los migrará a través de los fragmentos respetando las zonas configuradas.

Una vez finalizado el equilibrio:

  • Las particiones en la zona NA solo deben contener documentos con country : US y

  • Los fragmentos en la zona EU solo deben contener documentos con country : UK o country : DE.

Un documento con un valor para country distinto de US, UK o DE puede residir en cualquier fragmento del clúster.

Para confirmar la distribución de fragmentos, ejecuta sh.status().

La aplicación requiere las siguientes actualizaciones:

  • Los documentos con country : UK ahora deben estar asociados al nuevo centro de datos UK. Todos los datos del centro de datos EU deben migrarse.

  • La aplicación de chat ahora admite usuarios en México. Los documentos con country : MX deben enrutarse al centro de datos NA.

Realice los siguientes procedimientos para actualizar los rangos de zonas.

1

Para reducir el impacto en el rendimiento, es posible deshabilitar el balanceador en todo el clúster fragmentado para garantizar que no se realicen migraciones mientras se configuran las nuevas zonas o se eliminan las antiguas.

Utilice para detener el balanceador del sh.stopBalancer() clúster.

sh.stopBalancer()

Utilice para comprobar si el proceso de balanceo está en ejecución. Espere a que se completen las rondas de balanceo actuales antes de sh.isBalancerRunning() continuar.

2

Agregue cada fragmento del centro de datos UK a la zona UK.

sh.addShardTag("<shard name>", "UK")

Puede revisar las zonas asignadas a cualquier fragmento determinado sh.status() ejecutando.

3

Eliminar el rango de zona antiguo asociado al UK país mediante el método. Este método sh.removeTagRange() requiere:

  • El espacio de nombres completo de la colección de destino.

  • El límite inferior inclusivo del rango.

  • El límite superior exclusivo del rango.

sh.removeTagRange(
"chat.messages",
{ "country" : "UK", "userid" : MinKey },
{ "country" : "UK", "userid" : MaxKey }
)
4

Para valores de clave de fragmento country : UK donde, defina un rango de clave de fragmento y asócielo a la UK zona mediante el método. Este método sh.addTagRange() requiere:

  • El espacio de nombres completo de la colección de destino.

  • El límite inferior inclusivo del rango.

  • El límite superior exclusivo del rango.

  • El nombre de la zona.

sh.addTagRange(
"chat.message",
{ "country" : "UK", "userid" : MinKey },
{ "country" : "UK", "userid" : MaxKey },
"UK"
)

Para valores de clave de fragmento country : MX donde, defina un rango de clave de fragmento y asócielo a la NA zona mediante el método. Este método sh.addTagRange() requiere:

  • El espacio de nombres completo de la colección de destino.

  • El límite inferior inclusivo del rango.

  • El límite superior exclusivo del rango.

  • El nombre de la zona.

sh.addTagRange(
"chat.messages",
{ "country" : "MX", "userid" : MinKey },
{ "country" : "MX", "userid" : MaxKey },
"NA"
)

Los MinKey valores y son valores especiales reservados para comparaciones. siempre se MaxKey MinKey MaxKey compara useridcomo inferior a cualquier otro valor posible, mientras que siempre se compara como superior a cualquier otro valor posible. Esto garantiza que ambos rangos cubran todo el espacio de valores posibles de.

5

Si el balanceador se deshabilitó en los pasos anteriores, vuelva a habilitarlo al finalizar este procedimiento para reequilibrar el clúster.

sh.enableBalancing()Utilice, que especifica el espacio de nombres de la colección, para iniciar el balanceador

sh.enableBalancing("chat.messages")

Utiliza sh.isBalancerRunning() para comprobar si el proceso del balanceador se está ejecutando actualmente.

6

La próxima vez que se ejecute el balanceador, dividirá los fragmentos donde sea necesario y los migrará a través de los fragmentos respetando las zonas configuradas.

Antes de equilibrar:

  • Los fragmentos en la zona EU solo contienen documentos donde country : DE o country : UK, y

  • documentos donde country : MX podría almacenarse en cualquier fragmento del clúster fragmentado.

Después del equilibrio:

  • Los fragmentos en la zona EU solo contienen documentos donde country : DE,

  • Los fragmentos en la zona UK solo contienen documentos donde country : UK y

  • Los fragmentos en la zona NA solo contienen documentos donde country : US o country : MX.

Un documento con un valor para country distinto de US, MX, UK o DE puede residir en cualquier fragmento del clúster.

Para confirmar la distribución de fragmentos, ejecuta sh.status().

Volver

Gestionar

En esta página