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

MongoDB:Měli byste stále poskytovat ID odkazující na jiné sbírky nebo je pouze zahrnout?

Záleží.

Záleží na tom, kolik každého z těchto typů objektů očekáváte. Dokážete je všechny vměstnat do jednoho dokumentu MongoDB pro dané téma? Pravděpodobně ne.

Záleží na vztazích – máte vztahy one-to-many nebo many-to-many? Pokud je to jedna k mnoha a počet souvisejících entit je malý, můžete se rozhodnout je vložit do IList v dokumentu. Pokud je to many-to-many, můžete se rozhodnout použít tradičnější vztah nebo se můžete rozhodnout vložit obě strany jako ILlisty.

Stále můžete modelovat vztahy v MongoDB pomocí samostatných kolekcí, ALE v databázi nejsou žádná spojení, takže to musíte udělat v kódu. Načtení tématu a následné načtení komentářů k němu může být z hlediska výkonu v pořádku.

Další tipy:

S MongoDB můžete indexovat INTO pole na dokumentech. Nepřemýšlejte tedy o indexu jako o pouhém indexu na jednoduchém poli v dokumentu (jako je SQL). Můžete použít, řekněme, kolekci značek v tématu a indexovat do značek. (Viz http://www.mongodb.org/display/DOCS/Indexes #Indexes-Arrays )

Když načítáte nebo zapisujete data, můžete provést částečné čtení a částečný zápis jakéhokoli dokumentu. (viz http://www.mongodb.org/display /DOCS/Retrieving+a+Podmnožina+of+polí )

A konečně, když nevidíte, jak pomocí kolekcí a indexů získat to, co chcete, můžete toho dosáhnout pomocí redukce map. Chcete-li například najít všechny aktuálně používané tagy seřazené podle jejich frekvence použití, zmapovali byste každé téma, které vysílá tagy v něm použité, a pak byste tuto sadu zmenšili, abyste získali požadovaný výsledek. Výsledek zmenšení mapy pak můžete uložit trvale a aktualizovat jej pouze v případě potřeby.

Je to poměrně významný posun od relačního myšlení, ale stojí to za to, pokud potřebujete škálovatelnost a flexibilitu, kterou přístup NOSQL přináší.



  1. MongoDB $toUpper

  2. Pořadí klíčových hodnot v mongoDb

  3. Jak definovat vlastního pomocníka dotazu v modelu mongoose pomocí strojopisu?

  4. Zrušit již prováděnou úlohu v Python RQ?