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 executa uma operação de leitura, ele executa as seguintes etapas, 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 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 servidor MongoDB .
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 client = 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: 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 |
Documentação da API
Para saber mais sobre as aulas e os métodos usados neste guia, consulte a seguinte documentação da API: