EDYTUJ:
Właśnie znalazłem odpowiedź Brendana McAdamsa, faceta z 10gen, który jest oczywiście o wiele bardziej autorytatywny ode mnie i zaleca osadzanie dokumentów.
starszy tekst:
Pierwszym z nich jest ręczne dołączenie do każdego komentarza ObjectID użytkownika, do którego należy.
comment: { text : "...",
date: "...",
user: ObjectId("4b866f08234ae01d21d89604"),
votes: 7 }
Drugim i sprytnym sposobem jest użycie DBRefs
dodajemy dodatkowe I/O do naszego dysku, tracąc wydajność, mam rację? (nie jestem pewien, jak to działa wewnętrznie), dlatego musimy unikać linkowania, jeśli to możliwe, prawda?
Tak - byłoby jeszcze jedno zapytanie, ale sterownik zrobi to za Ciebie - możesz to traktować jako rodzaj cukru składniowego. Czy to wpływa na wydajność? Właściwie to też zależy :) Jednym z powodów, dla których Mongo jest tak szalenie szybko, jest to, że używa pliki mapowane w pamięci
a mongo stara się jak najlepiej przechowywać cały zestaw roboczy (plus indeksy) bezpośrednio w pamięci RAM. A co 60 sekund (domyślnie) synchronizuje migawkę pamięci RAM z plikiem na dysku.
Kiedy mówię zestaw roboczy , mam na myśli rzeczy, nad którymi pracujesz:możesz mieć trzy kolekcje – foo , pasek , baz , ale jeśli pracujesz teraz tylko z foo i bar, powinny być załadowane do pamięci RAM, podczas gdy baz pozostaje na dysku porzucony. Ponadto pliki mapowane w pamięci pozwalają na załadowanie tylko części kolekcji. Więc jeśli budujesz coś takiego jak engadget lub techcrunch, istnieje duże prawdopodobieństwo, że zestaw roboczy będzie zawierał komentarze z ostatnich kilku dni, a stare strony będą wskrzeszane znacznie rzadziej (komentarze będą pojawiały się w pamięci na żądanie), więc tak się nie dzieje. nie wpływa znacząco na wydajność.
Więc przypomnijmy:tak długo, jak pracujesz w pamięci (możesz pomyśleć, że jest to buforowanie odczytu/zapisu), pobieranie tych rzeczy jest superszybkie i jeszcze jedno zapytanie nie będzie problemem. Jeśli pracujesz z fragmentami danych, które nie mieszczą się w pamięci, szybkość degradacja , ale nie znam teraz Twoich okoliczności – może to być do przyjęcia, więc w obu przypadkach wybieram użyj łączenie.