# La classe MongoDB\Driver\ReadConcern

(mongodb >=1.1.0)

## Introduction

MongoDB\Driver\ReadConcern contrôle le niveau d'isolation pour les opérations de lecture pour les ensembles de réplicas et les réplicas de réplicas. Cette option nécessite MongoDB 3.2 ou ultérieur.

## Synopsis de la classe

final class MongoDB\Driver\ReadConcern implements MongoDB\BSON\Serializable, Serializable {
/* Constantes */
const string AVAILABLE = "available";
const string LINEARIZABLE = "linearizable";
const string LOCAL = "local";
const string MAJORITY = "majority";
const string SNAPSHOT = "snapshot";
/* Méthodes */
final public bsonSerialize(): stdClass
final public __construct(?string `$level` = `null`)
final public getLevel(): ?string
final public isDefault(): bool
}

## Constantes pré-définies

`MongoDB\Driver\ReadConcern::AVAILABLE`

  Par défaut pour les lectures sur les secondaires lorsque `afterClusterTime` et `level` ne sont pas spécifiés.

  La requête renvoie les données les plus récentes de l'instance. Ne garantit pas que les données ont été écrites sur la majorité des membres de l'ensemble de réplicas (c'est-à-dire qu'elles peuvent être annulées).

  Pour les collections non fragmentées (y compris les collections dans un déploiement autonome ou un déploiement de réplicas), les lectures `"local"` et `"available"` se comportent de manière identique.

  Pour un cluster partagé, la lecture `"available"` fournit une plus grande tolérance aux partitions car elle n'attend pas pour garantir des garanties de cohérence. Cependant, une requête avec une lecture `"available"` peut renvoyer des documents orphelins si le fragment est en cours de migration de morceaux car la lecture `"available"`, contrairement à la lecture `"local"`, ne contacte pas le primaire du fragment ni les serveurs de configuration pour obtenir des métadonnées mises à jour.

`MongoDB\Driver\ReadConcern::LINEARIZABLE`

  La requête renvoie les données qui reflètent toutes les écritures réussies émises avec un niveau d'écriture de `"majority"` et reconnu avant le début de l'opération de lecture. Pour les ensembles de réplicas qui fonctionnent avec `writeConcernMajorityJournalDefault` défini sur `true`, la lecture linéarisable renvoie des données qui ne seront jamais annulées.

  Avec `writeConcernMajorityJournalDefault` défini sur `false`, MongoDB n'attendra pas que les écritures `w: "majority"` soient durables avant d'accuser réception des écritures. En tant que tel, les opérations d'écriture `"majority"` pourraient éventuellement être annulées en cas de perte d'un membre de l'ensemble de réplicas.

  Vous pouvez spécifier un niveau de lecture linéarisable pour les opérations de lecture sur le primaire uniquement.

  La lecture linéarisable garantit que les opérations de lecture spécifient un filtre de requête qui identifie de manière unique un seul document.

  Astuce

  Toujours utiliser `maxTimeMS` avec une lecture linéarisable en cas de non-disponibilité de la majorité des membres porteurs de données. `maxTimeMS` garantit que l'opération ne bloque pas indéfiniment et garantit plutôt que l'opération renvoie une erreur si le niveau de lecture ne peut pas être satisfait.

  La lecture linéarisable nécessite MongoDB 3.4.

`MongoDB\Driver\ReadConcern::LOCAL`

  Défaut pour les lectures sur le primaire si `level` n'est pas spécifié et pour les lectures sur les secondaires si `level` n'est pas spécifié mais que `afterClusterTime` est spécifié.

  La requête renvoie les données les plus récentes de l'instance. Ne garantit pas que les données ont été écrites sur la majorité des membres de l'ensemble de réplicas (c'est-à-dire qu'elles peuvent être annulées).

`MongoDB\Driver\ReadConcern::MAJORITY`

  La requête renvoie les données les plus récentes reconnues comme ayant été écrites sur la majorité des membres de l'ensemble de réplicas.

  Pour utiliser le niveau de lecture `"majority"`, les ensembles de réplicas doivent utiliser le moteur de stockage WiredTiger et le protocole d'élection version 1.

`MongoDB\Driver\ReadConcern::SNAPSHOT`

  La lecture `"snapshot"` est disponible pour les transactions multi-documents, et à partir de MongoDB 5.0, pour certaines opérations de lecture en dehors des transactions multi-documents.

  Si la transaction ne fait pas partie d'une session cohérente, lors de la validation de la transaction avec un niveau d'écriture `"majority"`, les opérations de transaction sont garanties d'avoir lu à partir d'un instantané des données majoritairement engagées.

  Si la transaction fait partie d'une session cohérente, lors de la validation de la transaction avec un niveau d'écriture `"majority"`, les opérations de transaction sont garanties d'avoir lu à partir d'un instantané des données majoritairement engagées qui assure la cohérence causale avec l'opération immédiatement précédent le début de la transaction.

  En dehors des transactions multi-documents, le niveau de lecture `"snapshot"` est disponible sur les primaires et les secondaires pour les opérations de lecture suivantes : `find`, `aggregate` et `distinct` (sur les collections non fragmentées). Toutes les autres commandes de lecture interdisent `"snapshot"`.

## Historique

Version | Description
--- | ---
PECL mongodb 1.11.0 | Ajout de la constante `MongoDB\Driver\ReadConcern::SNAPSHOT`.
PECL mongodb 1.7.0 | Implèmente Serializable.
PECL mongodb 1.4.0 | Ajout de la constante `MongoDB\Driver\ReadConcern::MAJORITY`.
PECL mongodb 1.2.0 | Ajout de la constante `MongoDB\Driver\ReadConcern::LINEARIZABLE` Implèmente MongoDB\BSON\Serializable.

## Voir aussi

- » Référence de lecture

## Sommaire

- MongoDB\Driver\ReadConcern::bsonSerialize — Renvoie un objet pour la sérialisation BSON
- MongoDB\Driver\ReadConcern::__construct — Créer un nouveau ReadConcern
- MongoDB\Driver\ReadConcern::getLevel — Renvoie l'option "level" du ReadConcern
- MongoDB\Driver\ReadConcern::isDefault — Vérifie si c'est le read concern par défaut