Standard skriveproblemet i MongoDB har været w:1
fra så langt tilbage som MongoDB 2.2 i 2012.
Der er tre forskellige indstillinger, du kan bruge til at konfigurere skriveproblemer i aktuelle MongoDB-versioner (version 3.2.6 og nyere):
w
indstilling :hvor mange noder skal anerkende skrivningen, før de erklærer den for en succes. Standard er 1, hvilket betyder, at den primære nodes bekræftelse er tilstrækkelig.j
indstilling :skal skrivningerne journaliseres før de bekræftes? Standard afhænger afwriteConcernMajorityJournalDefault
.- skrivConcernMajorityJournalDefault
:hvis du angiver
w:majority
skrive bekymringsindstilling for dine skrivninger uden at indstillej
, hvad er den underforståedej
værdi? Standard ertrue
(Skriver skal journalføres i flertallet af afstemningsknuderne, før de kvitteres).
Der er også en wtimeout
indstilling
at konfigurere, hvor længe MongoDB skal vente på, at skriveproblemer er opfyldt, før klienten informeres om, at skrivningen ikke er blevet bekræftet. Ellers kan skribenter, der venter på, at skrivebekymringen bliver tilfredsstillet, vente evigt i stedet for at mislykkes.
Den særlige indstilling her er w:majority
. Det betyder, at skrivninger skal forplante sig til flertallet af stemmeberettigede noder (og også til deres journaler) i et replikasæt, der skal anerkendes. Dette er uden tvivl den sikreste indstilling, samtidig med at den giver god ydeevne, fordi:
- Det forhindrer, at anerkendte skrivninger bliver rullet tilbage i tilfælde af fejl.
- Den regulerer applikationens gennemløb, så den ikke sender skrivninger hurtigere, end hvad replikasættet kan håndtere (på grund af hardwarebegrænsninger, netværkssituation osv.).
Som du har forestillet dig, inkluderer afstemningsknudepunkter arbiteren . I et replikasæt med primær-sekundær-arbiter-opsætning, w:majority
kunne mislykkes i et scenarie, hvor:
- En af de databærende noder er offline af en eller anden grund.
- Replikasættet er stadig online med en skrivbar primær, da topologien nu er primær-arbiter-offline.
- Skriver med
w:1
vil lykkes som normalt, men disse skrivninger kunne rulles tilbage (da de ikke blev skrevet til flertallet af stemmedatabærende noder). - Da dommeren ikke har nogen data,
w:majority
skriver vil mislykkes (eller venter på ubestemt tid), da dommeren tælles som en afstemningsknude.
Af denne grund anbefales det ikke at bruge en dommer, hvis du planlægger at bruge w:majority
i din ansøgning.
Bemærk venligst, at det heller ikke anbefales at bruge en arbiter i et 3-node replikasæt, der danner et shard i en sharded klynge, da chunk moves kræver w:majority
. At have en databærende nodefejl i ét shard vil være skadeligt for chunk-migreringsoperationer.