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 estas 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 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 CollectionCriteria 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 gravação 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 Client instância passando um ClientOptions objeto 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 DatabaseOptions objeto 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 collection chamada test_collection passando um CollectionOptions objeto 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 visualizar exemplos de código, consulte o guia de Agrupamentos do.
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: