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 Sync 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 controlador de sincronización de Kotlin ejecuta una operación de guardado, comienza seleccionando todos los servidores en los que se puede guardar de la lista de servidores conocidos, no solo aquellos que coinciden con la preferencia de lectura activa. El resto de los pasos son idénticos a los de la lista anterior.
Para obtener más información sobre el algoritmo de selección de servidores de MongoDB, consulte Algoritmo de selección de servidores en el manual de MongoDB Server.
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 mongoClient = 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 | |||
|---|---|---|---|---|
| La ventana de latencia para la elegibilidad del servidor. Si el viaje de ida y vuelta de un servidor tarda más | |||
| La configuración de preferencia de lectura por defecto del cliente. Para obtener más información sobre las opciones de preferencia de lectura, consulte Preferencia de lectura en el manual de MongoDB Server. Puede especificar esta configuración en un objeto | |||
| El tiempo que el driver intenta seleccionar un servidor antes de agotar el tiempo de espera. Puedes especificar esta configuración en un objeto |
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: