Aller au contenu

Utilisation de "write concern" et "read preference"#

Comprendre le "write concern"#

  • Définition : niveau de garantie pour les écritures
  • Impact sur la durabilité et la disponibilité des données

Niveaux de "write concern"#

  • w: : aucune garantie, succès immédiat, risque accru de perte de données
  • w: 1 : écriture confirmée sur le nœud primaire, compromis entre performance et sécurité
  • w: >1 : écriture confirmée sur un nombre spécifié de membres, permet de garantir la durabilité sur plusieurs nœuds
  • w: "majority" : écriture confirmée sur la majorité des membres du replica set, garantit la meilleure durabilité des données

Réglage du "write concern"#

  • Configuration au niveau du client
    • Exemple : db.collection.insertOne({ ... }, { writeConcern: { w: <niveau>, j: <journaling>, wtimeout: <timeout> }})
    • Permet de définir un "write concern" spécifique pour chaque opération
  • Configuration au niveau du serveur
    • Exemple : mongod --setParameter writeConcernMajorityJournalDefault=<valeur>
    • Applique un "write concern" par défaut pour toutes les opérations sur le serveur

Comprendre la "read preference"#

  • Définition : spécifie la préférence pour la lecture des données, permet d'équilibrer les charges de lecture
  • Impact sur la répartition des lectures entre les nœuds et la tolérance aux pannes

Modes de "read preference"#

  • primary : lecture uniquement depuis le nœud primaire (par défaut), garantit des lectures cohérentes
  • primaryPreferred : lecture depuis le nœud primaire si disponible, sinon depuis un secondaire, tolère les pannes du nœud primaire
  • secondary : lecture uniquement depuis les nœuds secondaires, réduit la charge sur le nœud primaire
  • secondaryPreferred : lecture depuis un nœud secondaire si disponible, sinon depuis le primaire, préfère les lectures sur les nœuds secondaires
  • nearest : lecture depuis le nœud ayant le temps de réponse le plus court, minimise la latence

Réglage de la "read preference"#

  • Configuration au niveau du client
    • Exemple : MongoClient.connect(uri, { readPreference: '<mode>' }) * Définit un mode de "read preference" par défaut pour toutes les opérations de lecture
  • Configuration au niveau de la requête
    • Exemple : db.collection.find({ ... }).readPref('<mode>', [tagSet])
    • Applique un mode de "read preference" spécifique pour chaque requête
  • Utilisation de "tag sets" pour sélectionner des nœuds avec des caractéristiques spécifiques
    • Exemple : db.collection.find({ ... }).readPref('secondary', [{ region: 'EU' }, { region: 'US' }])
    • Permet de diriger les lectures vers des nœuds en fonction de critères précis (ex : région géographique)