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

Mnoho až mnoho se aktualizuje v MongoDB bez transakcí

@Gareth , máte několik legitimních způsobů, jak to udělat. Klíčovým problémem je tedy to, jak plánujete data dotazovat (tj. jaké dotazy musí být rychlé )

Zde je několik metod.

Metoda č. 1:shromažďování odkazů

Můžete vytvořit kolekci, která jednoduše obsahuje mapování mezi kolekcemi.

Výhody:

  • Podporuje atomické aktualizace, aby nedošlo ke ztrátě dat

Nevýhody:

  • Dodatečný dotaz při pokusu o přesun mezi kolekcemi

Metoda č. 2:ukládejte kopie menších mapování do větší sbírky

Například:máte miliony Products , ale pouze sto Categories . Pak byste uložili Categories jako pole uvnitř každého Product .

Výhody:

  • Nejmenší půdorys
  • Potřebuje pouze jednu aktualizaci

Nevýhody:

  • Dodatečný dotaz, pokud půjdete "špatnou cestou"

Metoda č. 3:uložte kopie všech mapování v obou kolekcích

(co navrhujete)

Výhody:

  • Přístup na jeden dotaz pro přesun mezi oběma kolekcemi

Nevýhody:

  • Potenciálně velké indexy
  • Potřebuje transakce (?)

Pojďme se bavit o „transakcích potřeb“. Existuje několik způsobů provádění transakcí a opravdu záleží na tom, jaký typ bezpečnosti požadujete.

Určitě to zvládneš. Budete si muset položit otázku, co nejhoršího se stane, když selže pouze jeden z uložení?

Metoda č. 4:zařaďte změnu do fronty

Nevím, jestli jste někdy pracovali s frontami, ale pokud máte určitou volnost, můžete vytvořit jednoduchou frontu a mít různé úlohy, které aktualizují jejich příslušné kolekce.

Toto je mnohem pokročilejší řešení. Měl bych tendenci jít s #2 nebo #3.



  1. Víceserverový cluster Node.js:jak sdílet objekt v clusteru několika uzlů

  2. MongoDB zkopíruje pole do jiné kolekce s cizím klíčem

  3. Porovnání dat v Mongodb s ovladačem C# LINQ

  4. Najděte objekty mezi dvěma daty MongoDB