Write concern para conjuntos de réplicas
Nesta página
Write concern para conjuntos de réplicas descreve o número de membros portadores de dados (ou seja, o primary e o secundário, mas não os arbiters) que devem confirmar uma operação de gravação antes que a operação retorne como bem sucedida. Um membro só pode reconhecer uma operação de gravação depois de receber e aplicar a gravação com sucesso.
Para conjuntos de réplicas:
Uma write concern de
w: "majority"
requer o reconhecimento de que as operações de escrita foram comprometidas de forma duradoura com uma maioria calculada dos membros votantes portadores de dados. Para a maioria das configurações de conjunto de réplica,w: "majority"
é a write concern padrão.Uma preocupação de preocupação de gravação de
w: 1
exige apenas a confirmação do membro primário do conjunto de réplicas antes de retornar a confirmação da preocupação de gravação.Uma preocupação de gravação com um valor numérico maior que
1
requer confirmação do primário e de quantos secundários forem necessários para atender ao valor especificado. Os secundários não precisam ser membros com direito a voto para atingir o limite de preocupação de gravação. O valor de preocupação de gravação especificado não pode ser maior que o número total de membros de suporte de dados no conjunto de réplica.
Para obter a documentação completa sobre o comportamento de reconhecimento de escrita, consulte Comportamento de confirmação.
Um aplicativo que emite uma operação de escrita que requer confirmação de write concern aguarda até que o primary receba confirmação do número necessário de membros para o write concern especificado. Para write concern de w
maior que 1 ou w : "majority"
, o primary espera até que o número necessário de secundários reconheça a escrita antes de retornar a confirmação de write concern. Para a write concern de w: 1
, o primary pode retornar a confirmação de write concern assim que aplicar localmente a escrita, uma vez que é elegível para contribuir com a write concern solicitada.
Quanto mais membros reconhecerem uma escrita, menor a probabilidade de que os dados gravados possam ser revertidos se o primary falhar. No entanto, especificar uma alta write concern pode aumentar a latência, pois o cliente deve aguardar até receber o nível solicitado de confirmação de write concern.
A seleção da preocupação de gravação ideal para qualquer operação de gravação depende das metas de desempenho do seu aplicativo e dos requisitos de durabilidade dos dados. Para obter mais orientações sobre como configurar a preocupação de gravação para evitar reversões, consulte Evitar reversões de conjuntos de réplicas.
Verificar operações de escrita em conjuntos de réplicas
A seguinte operação inclui a opção writeConcern
para o método insertOne()
. A operação especifica: - a preocupação de escrita "majority"
e - um tempo limite de 5 segundos.
O parâmetro de preocupação de write concern de wtimeout
garante que a operação não fique bloqueada indefinidamente.
db.products.insertOne( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: "majority" , wtimeout: 5000 } } )
A aplicação aguarda até que o reconhecimento primário da preocupação de gravação retorne, indicando que uma maioria calculada dos membros com direito a voto portadores de dados reconheceu a operação de gravação. Por exemplo, em um conjunto de réplicas de 2 membros (P-S-S), a operação exigiria o reconhecimento de 3 dos membros do . Se o conjunto de réplicas fosse dimensionado posteriormente para incluir dois membros com direito a voto secundários adicionais, a mesma operação exigiria o reconhecimento de 3 dos 5 membros do conjunto de réplicas. Se o primário não retornar a confirmação da preocupação de gravação dentro do limite wtimeout
, a operação de gravação falhará com um erro de preocupação de gravação.
Uma operação de gravação que atinge o tempo limite de espera pela preocupação de gravação especificada indica apenas que o número necessário de membros do conjunto de réplicas não reconheceu a operação de gravação dentro do período wtimeout
. Isso não indica necessariamente que o primário não aplicou a gravação. Os dados podem existir em um subconjunto de nós do conjunto de réplicas no momento do erro de preocupação de gravação e podem continuar replicando até que todos os nós no cluster tenham esses dados. Os aplicativos devem levar em conta a disponibilidade potencial dos dados de gravação, independentemente do estado de reconhecimento da preocupação de gravação.
A sintaxe exata para especificar a write concern depende da operação de escrita. Consulte a documentação da operação de escrita para obter instruções sobre suporte e sintaxe da write concern. Para obter a documentação completa sobre write concern, consulte Write Concern.
Modificar padrão write concern
Você pode modificar a write concern padrão de um conjunto de réplicas emitindo o comando setDefaultRWConcern
.
Se você emitir uma operação de gravação com uma preocupação de gravação específica, a operação de gravação usará sua própria preocupação de gravação em vez do padrão.
Write concerns personalizadas
Você pode marcar os membros dos conjuntos de réplicas e usar os conjuntos de tags resultantes para criar write concerns personalizadas. Consulte Configurar conjuntos de tags de conjuntos de réplicas para obter informações sobre como configurar write concerns personalizados usando conjuntos de tags.