sql >> Databáze >  >> NoSQL >> MongoDB

Rozdíl mezi většinovým a linearizovatelným

Linearizovatelný " obavy o čtení byly představeny v MongoDb 3.4 s cílem vyřešit možný problém s "většinou "Přečtěte si znepokojení."

Pokusme se pochopit problém s „většinou " přečtěte si obavy, abyste zjistili, co "Linearizovatelné “ nám přináší.

Předpokládejme, že máme replikovanou sadu 3 uzlů, která vypadá asi takto:

Kde,A je Primární,B je sekundární,C je sekundární

Mějme také dva uživatele Alice a Bob , který bude provádět některé operace s následujícím dokumentem, který se nachází v "uživatelích sbírka.

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

V okamžiku T0:

stane se následující,

  1. Alice se připojí k A (primární) a problémy s následujícím příkazem.

Výstup:

  1. B a C si uvědomuje, že A přestal reagovat a zahájí volební proceduru. (Může to být způsobeno rozdělením sítě ).

V okamžiku T1:

stane se následující,

  1. Vzhledem k volebnímu procesu je B novým primářem .

Nicméně až do času A není sděleno nebo A sám si uvědomuje, že se potřebuje degradovat na sekundární, které nadále slouží jako primární (to je však obecně na velmi krátkou dobu).

V okamžiku T2:

  1. Bob se připojí k B (nový primární) a problémy s následujícím příkazem.
  1. Bob je potvrzen, že píše.

V okamžiku T3:

  1. Alice se připojí k A (starý primární) a problémy s následujícím příkazem.

Výstup:

Alice zde získává zastaralá data i poté, co zadá většinový problém čtení, tj. zápis provedený Bobem není pro Alici viditelný. Tedy vlastnost „Linearizovatelnost " je v tomto případě kompenzován.

Proto přichází řešení, tj. „linearizovatelné S touto vlastností mongod zkontroluje své primární a může vidět většinu uzlů před vydáním výsledků operace čtení. Používání této obavy o čtení je však penalizováno náklady na výkon nad "většinou", takže to není náhrada za „většina“ čte obavy.

Ohledně writeConcernMajorityJournalDefault vlastnost, je to pouze možnost konfigurace sady replik. Přijímá booleovskou hodnotu .

Pravda znamená, že MongoDB potvrdí operaci zápisu poté, co většina hlasujících členů zapsala do deníku na disku.

Nepravda znamená, že MongoDB potvrdí operaci zápisu poté, co většina hlasujících členů aplikovala operaci v paměti.

Výše uvedená vlastnost je použitelná pouze v případě, že je použit zápis obavy "většina" a není specifikován příznak žurnálování.



  1. Jak předat hodnotu MongoDb Json do mřížky KendoUI pomocí metody webové služby

  2. Mnohonásobná aktualizace Mongoose

  3. Dotaz na dokumenty, které mají vnitřní podpole dané hodnoty

  4. Jak uložit obrázek na backend uzlu?