sql >> Databasteknik >  >> NoSQL >> MongoDB

Vad är standard mongod write concern i vilken version?

Standardskrivproblemet i MongoDB har varit w:1 från så långt tillbaka som MongoDB 2.2 2012.

Det finns tre olika inställningar du kan använda för att ställa in skrivproblem i nuvarande MongoDB-versioner (version 3.2.6 och nyare):

  • w inställning :hur många noder ska bekräfta skrivningen innan de förklarar att den är framgångsrik. Standard är 1, vilket betyder att den primära nodens bekräftelse är tillräcklig.
  • j inställning :måste skrivningarna journalföras innan de bekräftas? Standard beror på writeConcernMajorityJournalDefault .
  • skrivConcernMajorityJournalDefault :om du anger w:majority skriv orosinställning för dina skrivningar utan att ställa in j , vad är den underförstådda j värde? Standard är true (Skriver ska journalföras i majoriteten av röstningsnoderna innan de bekräftas).

Det finns också en wtimeout inställning för att konfigurera hur länge MongoDB ska vänta på att skrivproblemet är tillfredsställt innan klienten informeras om att skrivningen inte har bekräftats. Annars kan skrivningar som väntar på att skriva oro ska bli tillfredsställda vänta för evigt istället för att misslyckas.

Den speciella inställningen här är w:majority . Det betyder att skrivningar måste spridas till majoriteten av röstningsnoder (och även till deras journaler) i en replikuppsättning som ska erkännas. Detta är utan tvekan den säkraste inställningen samtidigt som den ger bra prestanda, eftersom:

  • Det förhindrar att bekräftade skrivningar återställs i händelse av fel.
  • Den reglerar programmets genomströmning så att den inte skickar skrivningar snabbare än vad replikuppsättningen kan hantera (på grund av hårdvarubegränsningar, nätverkssituation, etc.).

Som du har föreställt dig, inkluderar röstningsnoder skiljedomaren . Således, i en replikuppsättning med primär-sekundär-arbiter-inställning, w:majority kan misslyckas i ett scenario där:

  • En av de databärande noderna är offline av någon anledning.
  • Replikuppsättningen är fortfarande online med en skrivbar primär, eftersom topologin nu är primär-arbiter-offline.
  • Skriver med w:1 kommer att lyckas som vanligt, men dessa skrivningar kan rullas tillbaka (eftersom det inte skrevs till majoriteten av röstdatabärande noder).
  • Eftersom medlaren inte har några data, w:majority skrivning kommer att misslyckas (eller väntar på obestämd tid) eftersom medlaren räknas som en röstnod.

Av denna anledning rekommenderas inte att använda en skiljedomare om du planerar att använda w:majority i din ansökan.

Observera att det inte heller rekommenderas att använda en arbiter i en 3-nods replikuppsättning som bildar en shard i ett sharded kluster, eftersom chunk moves kräver w:majority . Att ha ett databärande nodfel i en shard kommer att vara skadligt för chunk-migreringsoperationer.



  1. Hur man installerar och konfigurerar MongoDB på Ubuntu

  2. MongoDB:Bulk infoga (Bulk.insert) vs insert multiple (insert([...]))

  3. Hur konverterar man godtyckligt kapslad JSON till CSV med jq – så att du kan konvertera tillbaka det?

  4. Hur sätter man in resque-arbetare i produktionen?