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

Proč MongoDB nepoužívá fsync()?

Důvodem je výkon. Bez nutnosti zapisovat na disk při každé změně, MongoDB zvládne aktualizace rychleji.

MongoDB vám řekne, kdy byly aktualizace doručeny na server, nikoli po zapsání aktualizací , jak si můžete přečíst v dokumentaci na Ověření šíření zápisů s getLastError :

To jde proti ACID , konkrétněji proti D, což znamená trvanlivost :

Vlastnosti ACID většinou platí pro tradiční systémy RDBMS. Systémy NoSQL, které zahrnují MongoDB, se vzdávají jedné nebo více vlastností ACID, aby dosáhly lepší škálovatelnosti. V případě MongoDB byla obětována trvanlivost pro lepší výkon při zpracování velkého množství aktualizací.

MongoDB a ACID

Většina vlastností ACID je zaručena na úrovni transakce . Transakce je obvykle skupina dotazů, se kterými by se mělo zacházet jako s jednou jednotkou. MongoDB nemá žádnou koncepci transakcí, opět z důvodů výkonu . Většina vlastností ACID se proto na MongoDB nevztahuje.

A — Atomicita říká, že transakce by měla být úspěšná nebo neúspěšná. Není dovoleno částečně uspět; pokud část transakce selže, celá transakce by měla být vrácena zpět. MongoDB podporuje atomové operace na úrovni dokumentu, ale ne na úrovni „transakce“.

C — Konzistence částečně odkazuje na atomicitu, ale zahrnuje také referenční integritu . Relační databáze je zodpovědná za zajištění platnosti všech odkazů na cizí klíč. MongoDB nemá žádný koncept cizích klíčů, takže tato vlastnost ACID neplatí.

— Izolace uvádí, že dvě souběžné transakce se nesmí vzájemně ovlivňovat; pokud se dvě transakce pokusí upravit stejná data, druhá transakce musí počkat na dokončení první. Aby toho bylo dosaženo, databáze uzamkne data. MongoDB nemá žádný koncept zamykání, takže nepodporuje izolaci pro více operace. Jednotlivé operace jsou izolované.

D — Trvanlivost je popsána výše. MongoDB nepodporuje skutečnou odolnost (zatím), pokud jde o odolnost ACID-ic.

Nyní si možná myslíte, že MongoDB je ve srovnání se systémy RDBMS k ničemu, protože postrádá transakce a většinu ACID záruk. Částečným důvodem existence transakcí je však to, že relační databáze musí s určitými daty zacházet jako s jedinou entitou , ale tato data byla normalizována do více tabulek .

MongoDB vám umožňuje ukládat vaše data jako jednu entitu . To ve většině případů odstraňuje potřebu cizích klíčů a referenční integrity. Také nepotřebujete transakce s více dotazy, protože k aktualizaci jedné entity nepotřebujete více tabulek. Ve většině případů stačí aktualizovat pouze jeden dokument a tyto operace jsou v MongoDB atomické.

Podle prvního komentáře na této stránce , db.eval() poskytuje izolaci pro více operací. Nicméně podle dokumentaci obvykle se chcete vyhnout použití db.eval() .



  1. Jak připojit nodeJS docker kontejner k mongoDB

  2. Jak zobrazit nahraný obrázek v back-endu Keystonejs

  3. Jak získat den, měsíc a rok z data v SQL

  4. Výjimka GSS:Nebyly zadány žádné platné přihlašovací údaje (úroveň mechanismu:Nepodařilo se najít žádné Kerberos tgt)