sql >> Databasteknik >  >> NoSQL >> MongoDB

Skillnaden mellan majoritet och linjäriserbar

"Lineariserbar " read concern introducerades i MongoDb 3.4 för att lösa ett möjligt problem med "majoritet "Läs oro.

Låt oss försöka förstå problemet med "majoritet " läs oro för att känna vad "Lineariserbar " ger oss.

Anta att vi har en replikuppsättning av 3 noder, som ser ut ungefär så här:

Var,A är primär,B är sekundär,C är sekundär

Låt oss också ha två användare Alice och Bob , som kommer att utföra vissa operationer på följande dokument som finns i "användare " samling.

{
 "_id": 100234,
 "name": "Katelyn"
}

Vid tidpunkten T0:

följande händer,

  1. Alice blir kopplad till A (primär) och problem efter kommando.

Utdata:

  1. B och C inser att A har slutat svara och startar valproceduren.(Kan bero på nätverkspartitionering ).

Vid tidpunkten T1:

följande händer,

  1. På grund av valprocessen står B som ny primärval .

Men tills tiden A inte kommuniceras eller A själv inser att den behöver sänka sig själv till en sekundär, den fortsätter att fungera som primär (detta är i allmänhet under en mycket kort tidsperiod dock).

Vid tidpunkten T2:

  1. Bob blir ansluten till B (ny primär) och utfärdar följande kommando.
  1. Bob är kvitterad för att ha skrivit.

Vid tidpunkten T3:

  1. Alice blir kopplad till A (gammal primär) och problem efter kommando.

Utdata:

Alice får här inaktuella uppgifter även efter att ha utfärdat de flesta läsproblem, dvs skrivningen som Bob har gjort är inte synlig för Alice. Således, egenskapen för "Lineariserbarhet " kompenseras i detta fall.

Därför kommer lösningen, dvs "linjäriserbar " läs oro. Med den här egenskapen kontrollerar mongod dess primära och kan se majoriteten av noderna innan resultatet av läsoperationen utfärdas. Det finns dock en prestationskostnadsstraff för att använda denna läsoro över "majoritet", så detta är inte en ersättning för "majoritet" läser oro.

Angående writeConcernMajorityJournalDefault egenskapen är det bara ett konfigurationsalternativ för replikuppsättningar. Den accepterar booleskt värde .

Sant innebär att MongoDB bekräftar skrivoperationen efter att en majoritet av de röstberättigade medlemmarna har skrivit till journalen på disken.

False innebär att MongoDB bekräftar skrivoperationen efter att en majoritet av de röstande medlemmarna har tillämpat operationen i minnet.

Ovanstående egenskap är endast tillämplig när skrivproblemet "majoritet" används och journalflaggan inte är specificerad.



  1. Hur kan jag få värdet från Redis och lägga det i en variabel i NGiNX?

  2. Mongo-servern accepterar autentiseringsuppgifter från shell, men inte från Java/Scala-gränssnitt

  3. Mongodb kan inte hitta objekt med för långt _id

  4. elegant lista med upprepade underposter