sql >> Database teknologi >  >> NoSQL >> MongoDB

Forskellen mellem majoritet og lineariserbar

"Lineariserbar " læs bekymring blev introduceret i MongoDb 3.4 for at løse et muligt problem med "flertal "Læs bekymring.

Lad os prøve at forstå problemet med "flertal " læs bekymring for at fornemme, hvad "Lineariserbar " bringer til os.

Antag, at vi har et replikasæt af 3 noder, som ser nogenlunde sådan ud:

Hvor,A er Primær,B er sekundær,C er sekundær

Lad os også have to brugere Alice og Bob , som vil udføre nogle handlinger på følgende dokument, som ligger i "brugere " samling.

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

På tidspunktet T0:

følgende sker,

  1. Alice får forbindelse til A (primær) og problemer efter kommando.

Output:

  1. B og C indser, at A er holdt op med at svare og starter valgproceduren.(Kan være på grund af netværksopdeling ).

På tidspunktet T1:

følgende sker,

  1. På grund af valgprocessen står B som et nyt primærvalg .

Dog indtil tidspunktet A er ikke kommunikeret eller A selv indser, at den er nødt til at degradere sig selv til en sekundær, den fortsætter med at fungere som primær (dette er dog generelt i en meget kort periode).

På tidspunktet T2:

  1. Bob får forbindelse til B (ny primær) og problemer efter kommando.
  1. Bob er kvitteret for at skrive.

På tidspunktet T3:

  1. Alice får forbindelse til A (gammel primær) og problemer efter kommando.

Output:

Alice får her de forældede data, selv efter at have udstedt de fleste læste bekymringer, dvs. skrivningen lavet af Bob er ikke synlig for Alice. Således er egenskaben "Lineariserbarhed " kompenseres i dette tilfælde.

Derfor kommer løsningen, dvs. "lineariserbar " læs bekymring. Med denne egenskab tjekker mongod dens primære og kan se størstedelen af ​​knudepunkter, før resultaterne af læseoperationen udstedes. Der er dog en præstationsomkostningsstraf ved at bruge denne læsebekymring over "flertal", så dette er ikke en erstatning for "flertal" læste bekymring.

Angående writeConcernMajorityJournalDefault egenskab, er det blot en replika sæt konfigurationsmulighed. Den accepterer boolesk værdi .

Sandt betyder, at MongoDB anerkender skriveoperationen, efter at et flertal af de stemmeberettigede medlemmer har skrevet til journalen på disken.

Falsk betyder, at MongoDB anerkender skriveoperationen, efter at et flertal af de stemmeberettigede medlemmer har anvendt handlingen i hukommelsen.

Ovenstående egenskab er kun anvendelig, når der er brugt skrivebekymring "majoritet", og journalføringsflag ikke er angivet.



  1. Projekter første element i et array til nyt felt (MongoDB-aggregering)

  2. mongorestore fra enkeltstående til replicaset

  3. Mongodb:db.collection.copyTo() og eval() er blevet forældet. Hvad er alternativerne?

  4. mongodb:opdatering af elementer?