Menu Docs
Página inicial do Docs
/ / /
Manual da Biblioteca PHP

Especifique como as operações CRUD são executadas em conjuntos de réplicas

Nesta página

  • Visão geral
  • Configurar operações de leitura e escrita
  • Configuração do cliente
  • Configuração da sessão
  • Configuração da transação
  • Configuração do Banco de Dados
  • Configuração da Coleção
  • Configurações avançadas de leitura
  • Conjuntos de tags
  • LocalThreshold
  • Documentação da API

Neste guia, você pode aprender a configurar as opções de preocupação de gravação, preocupação de leitura e preferência de leitura para modificar a maneira como a Biblioteca PHP do MongoDB executa operações de criação, leitura, atualização e exclusão (CRUD) em conjuntos de réplicas.

É possível definir as opções de preocupação de gravação, preocupação de leitura e preferência de leitura nos seguintes níveis:

  • Cliente, que define o padrão para todas as execuções de operações, a menos que seja substituído

  • Sessão

  • transação

  • Database

  • collection

Esta lista também indica a ordem crescente de precedência das configurações de opção. Por exemplo, se você definir um nível de preocupação de leitura para uma transação, ela substituirá um nível de preocupação de leitura herdado do cliente.

Essas opções permitem personalizar a consistência causal e a disponibilidade dos dados em seus conjuntos de réplicas. Para ver uma lista completa de opções de preferência de leitura, preocupação de leitura e preocupação de gravação , consulte os seguintes guias no manual do MongoDB Server :

  • readPreference

  • Preocupação de leitura

  • Escreva preocupação

Você pode controlar como a biblioteca direciona as operações de leitura definindo uma preferência de leitura. Você também pode controlar como a biblioteca aguarda a confirmação das operações de leitura e escrita em um conjunto de réplicas ao definir read e write concerns.

Esta seção mostra como configurar a preferência de leitura, preocupação de leitura e preocupação de gravação em vários níveis passando um parâmetro de array de opções para qualquer um dos seguintes métodos:

Este exemplo mostra como definir a preferência de leitura, preocupação de leitura e preocupação de gravação de uma instância MongoDB\Client passando uma array para o construtor. O código define as seguintes configurações:

  • secondary preferência de leitura: Operações de leitura recuperam dados de nós secundários do conjunto de réplicas

  • local preocupaçã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éplicas

  • 2 preocupação de gravação: O primário e um membro do conjunto de réplicas secundário devem confirmar a operação de gravação

$clientOptions = [
'readPreference' => 'secondary',
'readConcernLevel' => 'local',
'w' => '2',
];
$client = new Client('mongodb://localhost:27017', $clientOptions);

Alternativamente, você pode especificar as configurações de leitura e escrita no URI de conexão, que é passado como um parâmetro para o construtor MongoDB\Client :

$uri = 'mongodb://localhost:27017/?readPreference=secondary&readConcernLevel=local&w=2';
$client = new Client($uri);

Observação

As opções readPreference, readConcernLevel e w cliente valores de string. Ao definir as configurações de leitura e gravação em qualquer outro nível, você deve atribuir valores do tipo MongoDB\Driver\ReadPreference, MongoDB\Driver\ReadConcern e MongoDB\Driver\WriteConcern às opções correspondentes.

Este exemplo mostra como definir a preferência de leitura, preocupação de leitura e preocupação de gravação de uma sessão passando uma array para o método startSession() . O código define as seguintes configurações:

  • PRIMARY_PREFERRED preferê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ível

  • LOCAL preocupaçã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éplicas

  • MAJORITY preocupação de gravação: A maioria de todos os membros do conjunto de réplicas deve reconhecer a operação de escrita

$sessionOptions = [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::LOCAL),
'writeConcern' => new WriteConcern(WriteConcern::MAJORITY),
];
$session = $client->startSession($sessionOptions);

Este exemplo mostra como definir a preferência de leitura, preocupação de leitura e preocupação de gravação de uma transação passando uma array para o método startTransaction() . O código define as seguintes configurações:

  • PRIMARY preferência de leitura: Operações de leitura recuperam dados do membro primário do conjunto de réplicas

  • MAJORITY preocupação de leitura: as operações de leitura retornam os dados mais recentes da instância que foram gravados para a maioria dos membros do conjunto de réplicas

  • 1 preocupação de gravação: O principal membro do conjunto de réplicas deve confirmar a operação de gravação

$transactionOptions = [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY),
'readConcern' => new ReadConcern(ReadConcern::MAJORITY),
'writeConcern' => new WriteConcern(1),
];
$session->startTransaction($transactionOptions);

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 de dados chamado test_database passando uma array de opções para o método selectDatabase() . O código define as seguintes configurações:

  • PRIMARY_PREFERRED preferê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ível

  • AVAILABLE preocupaçã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éplicas

  • MAJORITY preocupação de gravação: A maioria de todos os membros do conjunto de réplicas deve reconhecer a operação de escrita

$db = $client->selectDatabase('test_database', [
'readPreference' => new ReadPreference(ReadPreference::PRIMARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::AVAILABLE),
'writeConcern' => new WriteConcern(WriteConcern::MAJORITY),
]);

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 uma array de opções para o método selectCollection() . O código define as seguintes configurações:

  • SECONDARY_PREFERRED preferência de leitura: as operações de leitura recuperam dados dos membros secundários do conjunto de réplicas ou dos membros primários se nenhum secundário estiver disponível

  • AVAILABLE preocupaçã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éplicas

  • 0 preocupação de gravação: Não solicita confirmação da operação de escrita

$collection = $client->selectCollection('test_database', 'test_collection', [
'readPreference' => new ReadPreference(ReadPreference::SECONDARY_PREFERRED),
'readConcern' => new ReadConcern(ReadConcern::AVAILABLE),
'writeConcern' => new WriteConcern(0),
]);

Esta seção mostra como personalizar ainda mais suas configurações de operação de leitura das seguintes maneiras:

O MongoDB Server permite que você aplique tags de valor-chave a membros do conjunto de réplicas de acordo com qualquer critério que você escolher. Você pode então usar essas tags para direcionar um ou mais nós para uma operação de leitura.

Por padrão, a biblioteca PHP do MongoDB ignora as tags ao escolher um membro para ler. Para instruir a Biblioteca PHP MongoDB a preferir determinadas tags, passe-as como parâmetro para o construtor de classe MongoDB\Driver\ReadPreference . Em seguida, defina o objeto MongoDB\Driver\ReadPreference como o valor da opção readPreference banco de dados de dados.

Suponha que você esteja conectado a um conjunto de réplicas que contém membros hospedados em vários data centers nos Estados Unidos. Este exemplo de código define a opção readPreference para um conjunto de tags que instrui test_database a preferir leituras de membros secundários do conjunto de réplicas na seguinte ordem:

  1. Membros do centro de dados de Nova York (['dc' => 'ny'])

  2. Membros do centro de dados de São Francisco (['dc' => 'sf'])

  3. Quaisquer membros secundários ([])

$readPreference = new ReadPreference(
ReadPreference::RP_SECONDARY,
[
['dc' => 'ny'],
['dc' => 'sf'],
[],
],
);
$db = $client->selectDatabase(
'test_database',
['readPreference' => $readPreference],
);

Se vários membros do conjunto de réplicas corresponderem à preferência de leitura e aos conjuntos de tags especificados, a biblioteca PHP do MongoDB lerá a partir dos membros do conjunto de réplicas mais próximos, escolhidos de acordo com o tempo de ping .

Por padrão, a biblioteca usa somente membros cujos tempos de ping estão dentro de 15 milissegundos do membro mais próximo para queries. Para distribuir leituras entre nós com latências mais altas, passe uma array de opções para o construtor MongoDB\Client que define a opção localThresholdMS .

O exemplo a seguir especifica um limite local de 35 milissegundos:

$options = [
'replicaSet' => 'repl0',
'readPreference' => new ReadPreference(ReadPreference::RP_SECONDARY_PREFERRED),
'localThresholdMS' => 35,
];
$client = new Client('mongodb://localhost:27017', [], $options);

No exemplo anterior, a Biblioteca PHP do MongoDB distribui leituras entre nós correspondentes dentro de 35 milissegundos do tempo de ping do nó mais próximo.

Observação

A Biblioteca PHP MongoDB ignora o valor de localThresholdMS ao se comunicar com um conjunto de réplicas por meio de uma instância mongos . Nesse caso, use a opção de linha de comando localThreshold .

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API da biblioteca:

  • MongoDB\Client::__construct()

  • MongoDB\Client::startSession()

  • MongoDB\Client::selectDatabase()

  • MongoDB\Client::selectCollection()

Para saber mais sobre o startTransaction() método , consulte MongoDB\Driver\Session::startTransaction() na documentação da API da extensão.

Voltar

Armazenar arquivos grandes