Especifique como as operações CRUD são executadas em conjuntos de réplicas
Nesta página
Visão geral
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 :
Configurar operações de leitura e escrita
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:
MongoDB\Client::__construct(): Configura as configurações de nível do cliente
MongoDB\Client::startSession(): Configura as configurações de nível de sessão
MongoDB\Driver\Session::startTransaction(): Configura as configurações de nível de transação
MongoDB\Client::selectDatabase(): configura as configurações de nível de banco de dados
MongoDB\Client::selectCollection(): Configura as configurações de nível de 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 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éplicaslocal
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éplicas2
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.
Configuração da sessão
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ívelLOCAL
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éplicasMAJORITY
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);
Configuração da transação
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éplicasMAJORITY
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éplicas1
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);
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 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ívelAVAILABLE
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éplicasMAJORITY
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), ]);
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 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ívelAVAILABLE
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éplicas0
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), ]);
Configurações avançadas de leitura
Esta seção mostra como personalizar ainda mais suas configurações de operação de leitura das seguintes maneiras:
Conjuntos de tags
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:
Membros do centro de dados de Nova York (
['dc' => 'ny']
)Membros do centro de dados de São Francisco (
['dc' => 'sf']
)Quaisquer membros secundários (
[]
)
$readPreference = new ReadPreference( ReadPreference::RP_SECONDARY, [ ['dc' => 'ny'], ['dc' => 'sf'], [], ], ); $db = $client->selectDatabase( 'test_database', ['readPreference' => $readPreference], );
LocalThreshold
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 .
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 da biblioteca:
Para saber mais sobre o startTransaction()
método , consulte MongoDB\Driver\Session::startTransaction() na documentação da API da extensão.