MongoDB Academy · Leçon

Préoccupations d’écriture et durabilité confirmée

Les apprenants configureront les options w:majority, w:1 et de journalisation afin d’ajuster la garantie de durabilité des opérations d’écriture.

Leçon 3 sur 413 étapes

Préoccupations d’écriture et durabilité confirmée est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.

Qu’est-ce qu’une préoccupation d’écriture ?

Une préoccupation d’écriture indique à MongoDB combien de membres de l’ensemble de réplication doivent confirmer une écriture avant que le pilote la considère comme réussie. Il s’agit du principal réglage permettant d’arbitrer entre la durabilité (davantage de confirmations = plus de sécurité) et la latence (moins de confirmations = davantage de rapidité). Chaque opération d’écriture — insertion, mise à jour, suppression ou remplacement — peut définir sa propre préoccupation d’écriture.

L’option w : compter les confirmations

Le champ w contrôle le nombre de membres qui doivent confirmer l’écriture. w: 0 signifie lancer l’opération sans attendre de confirmation. w: 1 (valeur par défaut) signifie que seul le membre primaire doit confirmer. w: 2 signifie que le membre primaire et un membre secondaire doivent confirmer. w: 'majority' est le réglage recommandé en production : il attend la confirmation de la majorité des membres votants.

// w:1 — only primary acknowledges (default)
db.orders.insertOne({ item: 'pen' }, { writeConcern: { w: 1 } })

// w:majority — safe for production
db.orders.insertOne({ item: 'pen' }, { writeConcern: { w: 'majority' } })

w: majority — le réglage recommandé

w: 'majority' garantit que l’écriture a été répliquée sur la majorité des membres votants avant que le pilote reçoive une réponse de succès. Cela signifie qu’un nouveau nœud primaire élu aura toujours vu l’écriture, même après un basculement. C’est le seul paramètre qui empêche l’annulation de données en cas de défaillance du nœud primaire.

// Set default write concern at the database level
db.runCommand({
  setDefaultRWConcern: 1,
  defaultWriteConcern: { w: 'majority', wtimeout: 5000 }
})

L’option j : durabilité du journal

L’option j (journal) contrôle si MongoDB attend que l’écriture soit validée dans le journal sur disque avant de l’accuser réception. Avec j: true, même une panne du serveur immédiatement après l’accusé de réception ne peut pas entraîner la perte de l’écriture. Sans journalisation (j: false), une panne survenant entre l’écriture en mémoire et la prochaine vidange du journal pourrait entraîner la perte de l’opération.

// Fully durable write: majority replication + journaled
db.payments.insertOne(
  { amount: 499.99, currency: 'USD' },
  { writeConcern: { w: 'majority', j: true, wtimeout: 5000 } }
)

L’option wtimeout

wtimeout définit la durée maximale (en millisecondes) pendant laquelle le serveur attend les accusés de réception w requis. Si le seuil n’est pas atteint à temps, MongoDB renvoie une WriteConcernError — mais l’écriture a bien été effectuée sur le nœud primaire. Un dépassement de délai signale un retard de réplication, et non un échec d’écriture.

// Timeout after 3 seconds if secondaries are slow
db.logs.insertOne(
  { event: 'login', userId: 'u123' },
  { writeConcern: { w: 'majority', wtimeout: 3000 } }
)

w:0 sans attente : quand l’utiliser

w: 0 envoie l’écriture et renvoie immédiatement le résultat sans attendre le moindre accusé de réception. Cela maximise le débit pour les charges de travail à haut volume et tolérant la perte de données, comme la télémétrie, les événements analytiques ou l’ingestion de journaux, pour lesquelles des pertes occasionnelles sont acceptables. Ne l’utilisez jamais pour des transactions financières, du contenu généré par les utilisateurs ou toute donnée dont vous ne pouvez pas vous permettre la perte.

// High-throughput metrics logging — loss acceptable
await db.collection('metrics').insertMany(
  readings,
  { writeConcern: { w: 0 } }
)

Accusé de réception d’écriture et annulation

Lorsqu’un nœud primaire tombe en panne et qu’un nœud secondaire devient primaire, toutes les écritures que l’ancien nœud primaire n’avait pas encore répliquées sur la majorité sont annulées. Ces écritures annulées sont enregistrées dans un dossier d’annulation sur le disque afin de permettre une récupération manuelle. L’utilisation de w: 'majority' élimine ce risque, car l’écriture n’est confirmée qu’une fois qu’elle est présente sur la majorité.

Combiner l’accusé de réception d’écriture avec les transactions

Dans les transactions portant sur plusieurs documents, l’accusé de réception d’écriture s’applique lors de l’étape de validation, et non aux opérations individuelles exécutées dans la transaction. Valider avec w: 'majority' garantit que toutes les écritures de la transaction sont durables sur la majorité avant que l’application ne poursuive son exécution. Les accusés de réception définis au niveau des opérations dans une transaction sont ignorés.

const session = client.startSession()
await session.withTransaction(async () => {
  await orders.insertOne({ item: 'book' }, { session })
  await inventory.updateOne({ _id: 1 }, { $inc: { qty: -1 } }, { session })
}, { writeConcern: { w: 'majority' } })

Accusé de réception d’écriture par défaut dans MongoDB 5+

Depuis MongoDB 5.0, l’accusé de réception d’écriture implicite par défaut est w: 'majority' pour les ensembles de réplication et les clusters partitionnés. Avant la version 5.0, la valeur par défaut était w: 1. Cela signifie que les déploiements MongoDB modernes sont sûrs par défaut, mais vous devez tout de même définir explicitement les accusés de réception d’écriture dans le code applicatif critique afin de garantir la clarté et la portabilité.

// Verify the current default write concern
db.adminCommand({ getDefaultRWConcern: 1 })
// { defaultWriteConcern: { w: 'majority' }, ... }

Accusé de réception d’écriture au niveau du client

L’accusé de réception d’écriture peut être défini à trois niveaux : au niveau de l’opération (pour chaque insertion ou mise à jour), au niveau de la collection (lors de l’obtention d’une référence vers une collection) ou au niveau du client/de la chaîne de connexion. Les niveaux plus spécifiques remplacent les niveaux plus généraux. Le définir au niveau du client l’applique par défaut à toutes les opérations, tandis que les paramètres au niveau de l’opération conviennent mieux aux cas nécessitant des garanties de durabilité particulières.

// Set write concern at MongoClient level
const client = new MongoClient(uri, {
  writeConcern: { w: 'majority', j: true, wtimeout: 5000 }
})

// Override per-operation when needed
await db.criticalData.insertOne(doc, { writeConcern: { w: 3 } })

Choisir le bon accusé de réception d’écriture

Choisissez votre accusé de réception d’écriture en fonction de la criticité des données. Données financières ou transactionnelles : w: 'majority', j: true. Contenu utilisateur : w: 'majority'. Données de session ou de cache : w: 1. Télémétrie à haut volume : w: 0. Le bon choix établit un équilibre entre le coût de la perte de données et la pénalité de latence liée à l’attente d’accusés de réception supplémentaires.

Vérification rapide

Testez votre compréhension des concepts MongoDB et des bases de données NoSQL présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que l’accusé de réception d’écriture w contrôle le nombre de membres qui doivent confirmer une écriture, que w: 'majority' est le paramètre recommandé en production et empêche l’annulation après un basculement, et que j: true ajoute la durabilité du journal sur disque pour protéger les données contre les pannes. Nous allons maintenant étudier les préférences de lecture et la manière de répartir la charge de lecture sur l’ensemble de réplication.

Gratuit pour commencer

Apprends JavaScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Préoccupations d’écriture et durabilité confirmée » est-elle gratuite ?

Oui — le texte complet de « Préoccupations d’écriture et durabilité confirmée » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Préoccupations d’écriture et durabilité confirmée » ?

Les apprenants configureront les options w:majority, w:1 et de journalisation afin d’ajuster la garantie de durabilité des opérations d’écriture. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MongoDB Academy ?

Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Préoccupations d’écriture et durabilité confirmée » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?

Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Membres d’un jeu de réplicas : primaire, secondaires et arbitre
  2. Élections et basculement automatique
  3. Préoccupations d’écriture et durabilité confirmée
  4. Préférences de lecture : répartir la charge de lecture
← Retour à MongoDB Academy