UPRAVIT:
Právě jsem našel odpověď Brendana McAdamse, chlápka z 10gen, který je zjevně daleko autoritativní než já a doporučuje vkládat dokumenty.
starší text:
První je ručně zahrnout do každého komentáře ObjectID uživatele, ke kterému patří.
comment: { text : "...",
date: "...",
user: ObjectId("4b866f08234ae01d21d89604"),
votes: 7 }
Druhý a chytrý způsob je použít DBRefs
přidáváme další I/O na náš disk, ztrácíme výkon, nemám pravdu? (nejsem si jistý, jak to interně funguje), proto se musíme propojení, pokud je to možné, vyhnout, ne?
Ano - byl by ještě jeden dotaz, ale ovladač to udělá za vás - můžete si to představit jako druh syntaxe cukru. Má to vliv na výkon? Vlastně na tom také záleží :) Jedním z důvodů, proč je Mongo tak zatraceně rychlé, je to, že používá soubory mapované v paměti
a mongo zkuste nejlépe ponechat celou pracovní sadu (plus indexy) přímo v RAM. A každých 60 sekund (ve výchozím nastavení) synchronizuje snímek RAM se souborem na disku.
Když říkám pracovní sada , mám na mysli věci, se kterými pracujete:můžete mít tři sbírky - foo , bar , baz , ale pokud nyní pracujete pouze s foo a bar, měly by být načteny do ram, zatímco baz zůstává na disku opuštěný. Navíc soubory mapované v paměti umožňují načíst pouze část kolekce. Pokud tedy vytváříte něco jako engadget nebo techcrunch, je vysoká pravděpodobnost, že pracovní sada bude obsahovat komentáře za posledních několik dní a staré stránky se budou oživovat mnohem méně často (komentáře by se na požádání ukládaly do paměti), takže se ne t výrazně ovlivnit výkon.
Takže rekapitulace:pokud budete udržovat pracovní sadu v paměti (můžete si myslet, že je to cachování pro čtení/zápis), načítání těchto věcí je super rychlé a ještě jeden dotaz by nebyl problém. Pokud pracujete s částmi dat, které se nevejdou do paměti, bude rychlost degradace , ale teď nerozumím vašim okolnostem – mohlo by to být přijatelné, takže v obou případech mám tendenci zvolit použít propojení.