Visão geral
Neste guia, você pode aprender como configurar as operações de leitura e gravação no driver Rust.
Configurações de leitura e escrita
Você pode controlar como o driver direciona as operações de leitura definindo uma read preference. Você também pode controlar as opções de como o driver aguarda a confirmação das operações de leitura e gravação em um conjunto de réplicas, definindo uma read concern e uma write concern.
Por padrão, os bancos de dados herdam essas configurações da Client instância e as collections as herdam do banco de dados. No entanto, você pode definir configurações personalizadas de leitura ou gravação para um banco de dados ou coleção usando o método database_with_options () ou collection_with_options (). Estes métodos criam uma nova Database Collection instância ou com as configurações especificadas.
Para definir as configurações de leitura ou gravação, crie uma instância do tipo ReadConcern, WriteConcern ou SelectionCriteria e passe-a para o construtor de opções.
Dica
Para saber mais sobre as configurações de leitura e gravação, consulte os seguintes guias no manual do MongoDB Server :
As seções a seguir mostram como definir suas configurações de leitura e gravar nos níveis de cliente, banco de dados e coleção.
Configuração do cliente
Este exemplo mostra como definir a preferência de leitura, preocupação de leitura e preocupação de gravação de uma instância Client passando um objeto ClientOptions para o método Client::with_options(). O código define as seguintes configurações:
Secondarypreferência de leitura: Operações de leitura recuperam dados de nós secundários do conjunto de réplicaslocalpreocupação de leitura: As operações de leitura retornam os dados mais recentes da instância sem garantir que os dados tenham sido gravados na maioria dos membros do conjunto de réplicasMajoritypreocupação de gravação: A maioria de todos os membros do conjunto de réplicas deve reconhecer a operação de escrita
let read_preference = ReadPreference::Secondary { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::local(); let write_concern = WriteConcern::builder().w(Acknowledgment::Majority).build(); let client_options = ClientOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let client = Client::with_options(client_options)?;
Como alternativa, você pode especificar as configurações de leitura e gravação no URI de conexão e, em seguida, passar o URI para o construtor Client::with_uri_str() , conforme mostrado no exemplo a seguir:
let uri = "<connection string>/?readPreference=secondary&readConcernLevel=local&w=majority"; let client = Client::with_uri_str(uri).await?;
Configuração do Banco de Dados
Este exemplo mostra como definir a preferência de leitura, preocupação de leitura e preocupação de gravação de um banco de dados chamado test_database passando um objeto DatabaseOptions para o método database_with_options(). O código define as seguintes configurações:
PrimaryPreferredpreferência de leitura: as operações de leitura recuperam dados do membro primário do conjunto de réplicas ou de membros secundários se o primário não estiver disponívelavailablepreocupação de leitura: As operações de leitura retornam os dados mais recentes da instância sem garantir que os dados tenham sido gravados na maioria dos membros do conjunto de réplicasmajoritypreocupação de gravação: A maioria de todos os membros do conjunto de réplicas deve reconhecer a operação de escrita
let read_preference = ReadPreference::PrimaryPreferred { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::available(); let write_concern = WriteConcern::majority(); let database_options = DatabaseOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let database = client.database_with_options("test_database", database_options);
Configuração da Coleção
Este exemplo mostra como definir a preferência de leitura, preocupação de leitura e preocupação de gravação de uma coleção chamada test_collection passando um objeto CollectionOptions para o método collection_with_options(). O código define as seguintes configurações:
SecondaryPreferredpreferência de leitura: as operações de leitura recuperam dados dos nós secundários do conjunto de réplicas ou do nó primário se nenhum secundário estiver disponívelavailablepreocupação de leitura: As operações de leitura retornam os dados mais recentes da instância sem garantir que os dados tenham sido gravados na maioria dos membros do conjunto de réplicasw: 0preocupação de gravação: O cliente não solicita confirmação da operação de escrita
let read_preference = ReadPreference::SecondaryPreferred { options: Default::default(), }; let selection_criteria = SelectionCriteria::ReadPreference(read_preference); let read_concern = ReadConcern::available(); let write_concern = WriteConcern::builder().w(0.into()).build(); let collection_options = CollectionOptions::builder() .selection_criteria(selection_criteria) .read_concern(read_concern) .write_concern(write_concern) .build(); let collection = database.collection_with_options("test_collection", collection_options);
Leituras e gravações retráteis
O driver Rust repete automaticamente determinadas operações de leitura e gravação uma vez se elas falharem devido a um erro de rede ou servidor .
Você pode desabilitar explicitamente as leituras ou gravações repetíveis definindo a opção retry_reads ou retry_writes como false ao criar uma instância ClientOptions. O exemplo a seguir desativa leituras e gravações repetíveis para um cliente:
let client_options = ClientOptions::builder() .retry_reads(false) .retry_writes(false) .build(); let client = Client::with_options(client_options)?;
Para saber mais sobre as operações de leitura repetível com suporte, consulte Leituras repetíveis no manual do MongoDB Server . Para saber mais sobre as operações de gravações repetíveis com suporte, consulte Retryable writes no manual do MongoDB Server .
Agrupamentos
Você pode especificar um agrupamento para modificar o comportamento das operações de leitura e gravação. Um agrupamento é um conjunto de regras específicas do idioma para comparação de cadeias de caracteres, como para letras maiúsculas e minúsculas e acentos.
Para obter mais informações sobre agrupamentos e para exibir exemplos de código, consulte o guia Agrupamentos.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: