Docs Menu
Docs Home
/ /
Zones

Segmentación de datos por aplicación o cliente

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 le muestra cómo segmentar datos utilizando zonas.

Considere los siguientes escenarios en los que puede ser necesario segmentar datos por aplicación o cliente:

  • Una base de datos que sirve para múltiples aplicaciones

  • Una base de datos que da servicio a múltiples clientes

  • Una base de datos que requiere aislar rangos o subconjuntos de datos de aplicaciones o clientes

  • Una base de datos que requiere la asignación de recursos para rangos o subconjuntos de datos de aplicaciones o clientes

Este diagrama ilustra un clúster fragmentado que utiliza zonas para segmentar los datos según la aplicación o el cliente. Esto permite aislar los datos en fragmentos específicos. Además, cada fragmento puede tener hardware específico asignado para satisfacer los requisitos de rendimiento de los datos almacenados en él.

Descripción general de las zonas utilizadas para respaldar la segmentación de datos

Una aplicación rastrea la puntuación de un usuario junto con una client Campo que almacena las puntuaciones en la base de datos gamify, bajo la colección users. Cada valor posible de client requiere su propia zona para permitir la segmentación de datos. También permite al administrador optimizar el hardware de cada fragmento asociado a un client para optimizar el rendimiento y el coste.

Los siguientes documentos representan una vista parcial de dos usuarios:

{
"_id" : ObjectId("56f08c447fe58b2e96f595fa"),
"client" : "robot",
"userid" : 123,
"high_score" : 181,
...,
}
{
"_id" : ObjectId("56f08c447fe58b2e96f595fb"),
"client" : "fruitos",
"userid" : 456,
"high_score" : 210,
...,
}

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

El campo client en cada documento permite crear una zona para cada valor de cliente 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.

La aplicación requiere agregar un fragmento a una zona asociada a un client específico.

La implementación del clúster fragmentado actualmente consta de cuatro fragmentos.

Diagrama de la arquitectura de segmentación de datos mediante zonas

Para esta aplicación, hay dos zonas de cliente.

Diagrama de zonas utilizadas para apoyar la segmentación de datos
Cliente robot ("robot")
Esta zona representa todos los documentos donde client : robot.
Cliente FruitOS ("fruitos")
Esta zona representa todos los documentos donde client : fruitos.

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 se encuentre en un estado estable sin fragmentos que violen una zona configurada. Consulte 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 client.

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

chatDB = db.getSiblingDB("gamify")
chatDB.users.find( { "client" : "robot" , "userid" : "123" } )

Las consultas sin el client 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 mongos asociado al clúster fragmentado de destino para continuar. No puede crear zonas ni rangos de zonas conectándose directamente a un fragmento.

1

El balanceador debe estar deshabilitado 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 shard0000 a la zona robot.

sh.addShardTag("shard0000", "robot")

Agregue shard0001 a la zona robot.

sh.addShardTag("shard0001", "robot")

Agregue shard0002 a la zona fruitos.

sh.addShardTag("shard0002", "fruitos")

Agregue shard0003 a la zona fruitos.

sh.addShardTag("shard0003", "fruitos")

Ejecute para revisar la zona configurada para el clúster sh.status() fragmentado.

3

Define el rango para el cliente robot y asócialo a la zona robot usando el método sh.addTagRange().

Este método 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(
"gamify.users",
{ "client" : "robot", "userid" : MinKey },
{ "client" : "robot", "userid" : MaxKey },
"robot"
)

Define el rango para el cliente fruitos y asócialo a la zona fruitos usando el método sh.addTagRange().

Este método 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(
"gamify.users",
{ "client" : "fruitos", "userid" : MinKey },
{ "client" : "fruitos", "userid" : MaxKey },
"fruitos"
)

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 client.

4

Vuelva a habilitar el balanceador 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, migrará los datos a través de los fragmentos respetando las zonas configuradas.

Una vez finalizado el equilibrio, los fragmentos en la zona robot solo contienen documentos con client : robot, mientras que los fragmentos en la zona fruitos solo contienen documentos con client : fruitos.

Puede confirmar la distribución de fragmentos sh.status() ejecutando.

Volver

Segmentar por ubicación

En esta página