Overview
Todos los drivers de MongoDB siguen un algoritmo definido al seleccionar un servidor para leer o guardar. Al usar la propiedad ClusterSettings de un objeto MongoClientSettings, puedes personalizar este algoritmo para elegir el servidor que mejor funcione para tu aplicación.
Importante
Personalizar el algoritmo de selección del servidor podría tener consecuencias no previstas, como un rendimiento de lectura o escritura degradado.
Algoritmo de selección de servidor
Cuando el driver de Kotlin ejecuta una operación de lectura, realiza los siguientes pasos, en orden, para seleccionar una implementación de MongoDB:
Selecciona todos los servidores de la lista de servidores conocidos aptos para la operación solicitada, excluyendo aquellos que el controlador considera no disponibles o problemáticos
Para las lecturas, selecciona todos los servidores que coinciden con la preferencia de lectura activa.
Para escrituras, selecciona todos los servidores escribibles
Llama a la función definidor de servidor definida por el usuario, si el usuario proporciona una, y pasa la lista del paso anterior
Aplica la configuración de conexión
localThresholda la lista de servidores devuelta por la función.Selecciona como máximo dos servidores aleatorios de la lista de servidores que cumplen con los criterios anteriores y, a continuación, selecciona el servidor con menos operaciones simultáneas pendientes.
Cuando el driver de Kotlin ejecuta una operación de escritura, comienza seleccionando todos los servidores escribibles de la lista de servidores conocidos, no solo aquellos que coinciden con la preferencia de lectura activa. Los pasos restantes son idénticos a la lista anterior.
Para obtener más información acerca del algoritmo de selección de servidor de MongoDB, consulta Algoritmo de selección de servidor en el manual del servidor de MongoDB.
Implementar lógica de selección de servidor personalizada
Puedes implementar tu propia lógica personalizada de selección de servidores creando una clase que implemente la interfaz ServerSelector. El siguiente ejemplo muestra una clase personalizada simple de selección de servidores que selecciona los servidores con un valor de type de ServerType.REPLICA_SET_SECONDARY:
class CustomServerSelector : ServerSelector { override fun select(cluster: ClusterDescription): List<ServerDescription> { return cluster.serverDescriptions.filter { it.type == ServerType.REPLICA_SET_SECONDARY } } }
Utiliza el método applyToClusterSettings() para pasar una instancia de esta clase a tu MongoClientSettings. El siguiente ejemplo muestra cómo crear un MongoClient con una instancia de la clase de selector de servidor personalizada del ejemplo anterior:
val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString("<connection URI>")) .applyToClusterSettings { builder -> builder.serverSelector(CustomServerSelector()) } .build() val client = MongoClient.create(settings)
Configura la selección de servidores en Configuración
Puedes especificar las siguientes configuraciones de selección del servidor en tu objeto MongoClient o en tu URI de conexión:
Configuración | Descripción | |||
|---|---|---|---|---|
| Ventana de latencia para la elegibilidad del servidor. Si el tiempo de ida y vuelta de un servidor es mayor | |||
| La configuración de preferencia de lectura por defecto del cliente. Para obtener más información sobre las opciones de preferencia de lectura, consulta Preferencia de lectura en el manual del servidor de MongoDB. Puede especificar esta configuración en un objeto | |||
| Duración del tiempo que el controlador intenta seleccionar un servidor antes de que se agote el tiempo de espera. Puede especificar esta configuración en un |
Documentación de la API
Para obtener más información sobre las clases y métodos utilizados en esta guía, consulta la siguiente documentación de la API: