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)