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

Jak se vypořádat se vztahy při používání mongodb

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




  1. Nakonfigurujte časový limit Jedisů

  2. V Nodejs nelze použít odlišný Mongodb

  3. Převést MongoDB BsonDocument na platný JSON v C#

  4. Microservices Architecture pro velmi častý přístup k datům; v paměťových řešeních?