Visão geral
Todos os drivers do MongoDB seguem um algoritmo definido ao selecionar um servidor para ler ou escrever. Ao usar a propriedade ClusterSettings
de um objeto MongoClientSettings
, você pode personalizar esse algoritmo para escolher o servidor que funciona melhor para seu aplicação.
Importante
A personalização do algoritmo de seleção do servidor pode ter consequências não intencionais, como desempenho degradado de leitura ou gravação.
Algoritmo de Seleção do Servidor
Quando o driver Kotlin Sync executa uma operação de leitura, ele executa as seguintes etapas, em ordem, para selecionar uma implantação MongoDB :
Seleciona todos os servidores da lista de servidores conhecidos adequados para a operação solicitada, exceto aqueles que o driver considera indisponíveis ou problemáticos
Para leituras, seleciona todos os servidores que correspondem à preferência de leitura ativa
Para gravações, seleciona todos os servidores graváveis
Chama a função de seletor de servidor definida pelo usuário, se o usuário fornecer uma, e passa a lista da etapa anterior
Aplica a configuração de conexão
localThreshold
à lista de servidores retornados da funçãoSeleciona no máximo dois servidores aleatórios da lista de servidores que correspondem aos critérios anteriores e, em seguida, seleciona o servidor com menos operações simultâneas pendentes
Quando o driver Kotlin Sync executa uma operação de gravação, ele começa selecionando todos os servidores graváveis da lista de servidores conhecidos, não apenas aqueles que correspondem à preferência de leitura ativa. As etapas restantes são idênticas à lista anterior.
Para saber mais sobre o algoritmo de seleção do servidor MongoDB, consulte Algoritmo de seleção do servidor no manual do MongoDB Server.
Implemente lógica de seleção de servidor personalizada
Você pode implementar sua própria lógica de seleção de servidor personalizada criando uma classe que implemente a interface ServerSelector
. O exemplo a seguir mostra uma classe de seleção de servidor personalizada simples que seleciona servidores com um 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 } } }
Use o método applyToClusterSettings()
para passar uma instância dessa classe para seu MongoClientSettings
. O exemplo a seguir mostra como criar um MongoClient
com uma instância da classe de seletor de servidor customizado do exemplo anterior:
val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString("<connection URI>")) .applyToClusterSettings { builder -> builder.serverSelector(CustomServerSelector()) } .build() val mongoClient = MongoClient.create(settings)
Use as configurações para configurar a seleção do servidor
Você pode especificar as seguintes configurações de seleção de servidor em seu objeto MongoClient
ou em seu URI de conexão:
Contexto | Descrição | |||
---|---|---|---|---|
| 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: Integer Default: 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: Long Default: 30 seconds Connection URI Example: serverSelectionTimeoutMS=15000 |
Documentação da API
Para saber mais sobre as aulas e os métodos usados neste guia, consulte a seguinte documentação da API: