Výchozí starost o zápis v MongoDB byla w:1
již od MongoDB 2.2 v roce 2012.
Existují tři různá nastavení, která můžete použít k nastavení obav o zápis v aktuálních verzích MongoDB (verze 3.2.6 a novější):
w
nastavení :kolik uzlů by mělo zápis potvrdit, než jej prohlásí za úspěšné. Výchozí hodnota je 1, což znamená, že potvrzení primárního uzlu je dostatečné.j
nastavení :musí být zápisy před potvrzením zapsány do deníku? Výchozí závisí nawriteConcernMajorityJournalDefault
.- writeConcernMajorityJournalDefault
:pokud zadáte
w:majority
nastavení obav o zápis pro vaše zápisy bez nastaveníj
, co je implikovanéj
hodnota? Výchozí hodnota jetrue
(zápisy by měly být žurnálovány ve většině hlasovacích uzlů, než budou potvrzeny).
K dispozici je také wtimeout
nastavení
konfigurovat, jak dlouho má MongoDB čekat na uspokojení obav o zápis, než bude klienta informovat, že zápis nebyl potvrzen. V opačném případě mohou zápisy čekající na uspokojení starostí o zápis čekat věčně, místo aby selhaly.
Speciální nastavení je zde w:majority
. To znamená, že zápisy se musí rozšířit na většinu hlasovacích uzlů (a také do jejich deníků) v sadě replik, které mají být potvrzeny. Toto je pravděpodobně nejbezpečnější nastavení a zároveň poskytuje dobrý výkon, protože:
- Zabraňuje tomu, aby byly potvrzené zápisy vráceny zpět v případě selhání.
- Reguluje propustnost aplikace tak, aby neodesílala zápisy rychleji, než kolik zvládne sada replik (kvůli hardwarovým omezením, situaci v síti atd.).
Jak jste si představili, hlasovací uzly zahrnují arbitra . V sadě replik s nastavením primárního a sekundárního arbitra tedy w:majority
může selhat ve scénáři, kde:
- Jeden z uzlů nesoucích data je z nějakého důvodu offline.
- Sada replik je stále online s primárním zápisem, protože topologie je nyní primární-arbiter-offline.
- Píše pomocí
w:1
uspěje jako obvykle, ale tyto zápisy lze vrátit zpět (protože nebyly zapsány do většiny hlasovacích uzlů nesoucích data). - Protože rozhodčí nepřenáší žádná data,
w:majority
zápis selže (nebo čeká neomezeně dlouho), protože rozhodce se počítá jako hlasovací uzel.
Z tohoto důvodu se použití arbitra nedoporučuje, pokud plánujete použít w:majority
ve vaší aplikaci.
Vezměte prosím na vědomí, že použití arbitra v sadě replik se 3 uzly, které tvoří útržek ve štěpeném clusteru, se také nedoporučuje, protože přesuny po částech vyžadují w:majority
. Selhání datového uzlu v jednom fragmentu bude pro operace migrace bloků škodlivé.