Menu Docs
Página inicial do Docs
/ /
/ / / / /

Personalizar seleção de servidor MongoDB

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.

Quando o driver Kotlin executa uma operação de leitura, ele executa as seguintes etapas, para selecionar uma implantação MongoDB :

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

    1. Para leituras, seleciona todos os servidores que correspondem à preferência de leitura ativa

    2. Para gravações, seleciona todos os servidores graváveis

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

  3. Aplica a configuração de conexão localThreshold à lista de servidores retornados da função

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

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)

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

localThreshold

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

readPreference

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:
readPreference=primaryPreferred
&maxStalenessSeconds=90
&readPreferenceTags=dc:ny,rack:1

serverSelectionTimeout

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

Para saber mais sobre as aulas e os métodos usados neste guia, consulte a seguinte documentação da API:

Voltar

Compactação de rede

Nesta página