@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.