Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Personalizar selección de servidor

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.

Cuando el driver de Kotlin ejecuta una operación de lectura, realiza los siguientes pasos, en orden, para seleccionar una implementación de MongoDB:

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

    1. Para las lecturas, selecciona todos los servidores que coinciden con la preferencia de lectura activa.

    2. Para escrituras, selecciona todos los servidores escribibles

  2. Llama a la función definidor de servidor definida por el usuario, si el usuario proporciona una, y pasa la lista del paso anterior

  3. Aplica la configuración de conexión localThreshold a la lista de servidores devuelta por la función.

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

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)

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

localThreshold

Ventana de latencia para la elegibilidad del servidor. Si el tiempo de ida y vuelta de un servidor es mayor
que el tiempo de ida y vuelta del servidor más rápido más este valor, el servidor no es
elegible para la selección. Puede especificar esta configuración en un ClusterSettings objeto además del URI de conexión.

Tipo Integer
dedatos: Valor predeterminado:15 milisegundos
Ejemplo de URI de conexión: localThresholdMS=0

readPreference

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 MongoClientSettings además del URI de conexión.

Tipo de dato: ReadPreference
Por defecto: ReadPreference.primary()
Ejemplo de URI de conexión:

readPreference=primaryPreferred
&maxStalenessSeconds=90
&readPreferenceTags=dc:ny,rack:1

serverSelectionTimeout

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 ClusterSettings objeto además del URI de conexión.

Tipo de datos: ValorLong
predeterminado: 30 segundos
Ejemplo de URI de conexión: serverSelectionTimeoutMS=15000

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: