MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak radzić sobie z relacjami podczas używania mongodb

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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Czy można inicjować eksporty asynchronicznie w module node.js?

  2. MongoDB znajduje zakres dat, jeśli pokrywają się z innymi datami

  3. Mongoose z unikalną wartością logiczną prawdy

  4. Zwróć pierwszy element, jeśli nie znaleziono dopasowania w tablicy

  5. $projekt w $lookup mongodb