Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Segmentación de datos por aplicación o cliente

En los clústeres fragmentados, puedes crear zonas de datos particionados según la clave de partición. Puedes asociar cada zona con una o más particiones en el clúster. Una partición puede asociarse con cualquier número de zonas. En un clúster equilibrado, MongoDB migra fragmentos cubiertos por una zona solo a aquellos particiones asociados con la zona.

Tip

Al definir las zonas y los rangos de zonas antes de fragmentar una colección vacía o inexistente, la operación de "shard colletion" crea fragmentos para la zona definida rangos así como cualquier fragmento adicional para cubrir todo el rango de los valores de la clave de partición y realiza una distribución inicial de fragmentos basada en los rangos de zonas. Esta creación y distribución inicial de fragmentos permite una configuración más rápida del particionado zonificado. Después de la distribución inicial, el balanceador gestiona la distribución de fragmentos en adelante.

Consulta Predefinir zonas y rangos de zonas para una colección vacía o inexistente para ver un ejemplo.

Este tutorial te muestra cómo segmentar datos usando Zonas.

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

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

  • Una base de datos que sirve a múltiples clientes

  • Una base de datos que requiere aislar rangos o subconjuntos de datos de la aplicación o del cliente

  • Una base de datos que requiere 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 que los datos permanezcan aislados en particiones específicas. Además, cada partición puede tener una configuración específica de hardware para adaptarse a los requisitos de rendimiento de los datos almacenados en esa partición.

Resumen 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, almacenando 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 para cada partición asociado a un client para mejorar el rendimiento y reducir costos.

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 partición.

El campo client en cada documento permite crear una zona para cada valor distinto de cliente.

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

Consulte Elegir una clave de partición para obtener instrucciones más generales sobre cómo seleccionar una clave de partición.

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

El despliegue del clúster particionado consta actualmente de cuatro particiones.

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

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

Diagrama de zonas usado para 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 las zonas, si un documento insertado o actualizado coincide con una zona configurada, sólo se puede escribir en una partición 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 y que ningún fragmento esté violando una zona configurada. Consulta la siguiente sección sobre el balanceador para obtener más información.

MongoDB puede enrutar consultas a una partición específica si la consulta incluye al menos el campo client.

Por ejemplo, MongoDB puede intentar una operación de lectura dirigida en la siguiente query:

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

Las consultas sin el campo client realizan operaciones de difusión.

El balanceador migra los fragmentos a la partición apropiada cumpliendo cualquier zona configurada. Hasta la migración, las particiones pueden contener fragmentos que violan las zonas configuradas. Una vez que se complete el equilibrio, las particiones solo deberían contener fragmentos cuyos rangos no violen sus zonas asignadas.

Agregar o remover zonas o rangos de zonas puede provocar migraciones de fragmentos. Dependiendo del tamaño de tu conjunto de datos y de la cantidad de fragmentos que una zona o rango de zonas afecte, estas migraciones podrían afectar el rendimiento del clúster. Considera ejecutar tu balanceador durante ventanas programadas específicas. Consulta Programar la Ventana de Balance para un tutorial sobre cómo configurar una ventana de programación.

Para clústeres fragmentados que ejecutan Control de acceso basado en roles en implementaciones autogestionadas, autentícate como un usuario con al menos el rol clusterManager en la base de datos admin.

Debe estar conectado a un mongos asociado al clúster de destino para continuar. No puede crear zonas o rangos de zonas mediante la conexión directa a una partición.

1

El balanceador debe estar deshabilitado en todo el clúster compartido para asegurar que no ocurran migraciones mientras se configuran las nuevas zonas.

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

sh.stopBalancer()

Utiliza sh.isBalancerRunning() para comprobar si el proceso de balanceador está en ejecución actualmente. Espere a que finalicen las rondas de equilibrado actuales antes de 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")

Ejecuta sh.status() para revisar la zona configurada para el clúster sharded.

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 namespace completo de la colección objetivo

  • 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 namespace completo de la colección objetivo

  • 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 valores MinKey y MaxKey son valores reservados especiales para comparaciones. MinKey siempre se compara como menor que cualquier otro valor posible, mientras que MaxKey siempre se compara como superior a cualquier otro valor posible. Los rangos configurados capturan a todos los usuarios por cada client.

4

Vuelva a habilitar el balanceador para rebalancear el clúster.

Use sh.enableBalancing(), especificando el namespace de la colección, para iniciar el balanceador.

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á datos entre las particiones respetando las zonas configuradas.

Una vez que se complete el balanceo, las particiones en la zona robot sólo contendrán documentos con client : robot, mientras que las particiones en la zona fruitos sólo contendrán documentos con client : fruitos.

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

Volver

Segmentar por Ubicación

En esta página