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

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)

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

La ventana de latencia para la elegibilidad del servidor. Si el viaje de ida y vuelta de un servidor tarda más
que el tiempo de viaje 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 objeto ClusterSettings además del URI de conexión.

Tipo de dato: Integer
Por defecto: 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, consulte Preferencia de lectura en el manual de MongoDB Server. 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

El tiempo que el driver intenta seleccionar un servidor antes de agotar el tiempo de espera. Puedes especificar esta configuración en un objeto ClusterSettings además del URI de conexión.

Tipo de dato: Long
Por defecto: 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: