2012-06-13 11 views
5

Opracowujemy aplikację, która jest ciężka i może zawierać miliony dokumentów. Musimy odwoływać się do informacji o użytkowniku w prawie każdym zbiorze. Informacje użytkownika mają pewne cechy, które mogą się zmieniać od czasu do czasu.Powinniśmy używać dbref lub osadzonego dokumentu w ciężkiej aplikacji czytającej

Czy powinniśmy używać DBref lub osadzać informacje o użytkowniku we wszystkich kolekcjach?

Jaka jest zła wydajność DBref w ciężkiej aplikacji do odczytu?

Jeśli nie będziemy używać DBref, w jaki sposób możemy zaktualizować każdy dokument, jeśli informacje o użytkowniku ulegają okresowym zmianom?

W Mongodb, czy istnieje alternatywa dla DBref i dokumentów osadzonych dla tego rodzaju przypadków użycia?

Odpowiedz

6

DBref nie jest niczym innym niż kluczem obcym w tradycyjnych systemach relacyjnych. Jest to tylko konwencja, która z łatwością informuje kierowcę (który jest w stanie to zrobić) o automatycznym ładowaniu wspomnianych dokumentów. Więcej informacji na ten temat można znaleźć w artykule DBRef.
W zależności od używanego sterownika, możesz załadować te referencje automatycznie tylko wtedy, gdy ich potrzebujesz (leniwy), więc narzut wydajności powinien być naprawdę mały. Ale narzut pamięci jest nieco wyższy niż prosty odnośnik _id innego dokumentu. Zasadniczo powiedziałbym, że powinieneś używać tylko tych DBrefów, jeśli powiązany dokument może być typu zmiennego. Jeśli jego statyczność utknęła z _id-reference i może twoja własna funkcja leniwego loadera, więc nie powtarzasz się.
Nie powtarza się (lub powielanie danych w terminach baz danych) dotyczy również w kontekście, jak zaleca MongoDB, więc ja też byłoby tylko link your documents. Inaczej, byłoby większe wykorzystanie pamięci i nieco długotrwałe aktualizacje, aby zaktualizować tylko jedną encję logiczną (bardzo często fizycznie powieloną).

W przypadku wspomnianego wcześniej niestandardowego leniwego programu ładującego można dodać buforowanie, aby nie każde wyszukiwanie rzeczywiście skutkowało wyszukiwaniem mongodów. Najprawdopodobniej będziesz musiał zadbać o spójność danych między pamięcią podręczną i bazą danych.

+0

Dzięki za odpowiedź. To było naprawdę pomocne. – atandon

Powiązane problemy