Overview
Todos los controladores de MongoDB siguen un algoritmo definido al seleccionar un servidor desde el que leer o escribir. Al usar el ClusterSettings propiedad de un objeto MongoClientSettings, puede personalizar este algoritmo para elegir el servidor que funcione mejor para su aplicación.
Importante
Personalizar el algoritmo de selección del servidor podría tener consecuencias no deseadas, 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 adecuados para la operación solicitada, excluyendo aquellos que el controlador considera no disponibles o problemáticos.
Para 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 de selección 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 devueltos por la funciónSelecciona como máximo dos servidores aleatorios de la lista de servidores que coinciden con los criterios anteriores y luego selecciona el servidor con menos operaciones concurrentes pendientes
Cuando el controlador de sincronización de Kotlin ejecuta una operación de escritura, comienza seleccionando todos los servidores con permisos de escritura de la lista de servidores conocidos, no solo aquellos que coinciden con la preferencia de lectura activa. Los pasos restantes son idénticos a los de la lista anterior.
Para obtener más información sobre el algoritmo de selección del servidor MongoDB, consulte Algoritmo de selección de servidor en el manual del servidor MongoDB.
Implementar lógica de selección de servidor personalizada
Puede implementar su propia lógica de selección de servidores personalizada creando una clase que implemente la interfaz ServerSelector. El siguiente ejemplo muestra una clase de selección de servidores personalizada simple que selecciona servidores con un valor 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)
Utilice la configuración para configurar la selección del servidor
Puede especificar las siguientes configuraciones de selección de servidor en su objeto MongoClient o en su URI de conexión:
Configuración | Descripción | |||
|---|---|---|---|---|
| The latency window for server eligibility. If a server's round trip takes longer than the fastest server's round-trip time plus this value, the server isn't eligible for selection. You can specify this setting to a ClusterSettings object
in addition to the connection URI.Data Type: IntegerDefault: 15 milliseconds Connection URI Example: localThresholdMS=0 | |||
| The client's default read-preference settings. For more information on read preference
options, see Read Preference in the MongoDB Server manual.
You can specify this setting to a MongoClientSettings object in addition to the
connection URI.Data Type: ReadPreference Default: ReadPreference.primary()Connection URI Example: | |||
| The length of time the driver tries to select a server before timing out.
You can specify this setting to a ClusterSettings object in addition to the
connection URI.Data Type: LongDefault: 30 seconds Connection URI Example: serverSelectionTimeoutMS=15000 |
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: