Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver de Kotlin Sync
/ /

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 Sync executa uma operação de leitura, ele executa as seguintes etapas, em ordem, 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 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.

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)

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