2011-09-09 11 views
6

Chciałbym zakodować aplikację internetową, w której większość sekcji jest zależna od profilu użytkownika (na przykład różne listy rzeczy do zrobienia na osobę itp.) I Chciałbym użyć MongoDB. Zastanawiałem się nad stworzeniem około 10 osadzonych dokumentów dla głównego dokumentu profilu i przechowywanie wszystkiego, co dotyczy jednego użytkownika w jego własnym dokumencie.Dokumenty osadzone MongoDB w porównaniu z odniesieniami do unikalnych ObjectIds dla profilu użytkownika systemu

Nie widzę jasnego sposobu użycia obcych kluczy dla mongodb, jedynym sposobem byłoby stworzenie pola to_do_id z typem ObjectId na przykład, ale byłyby całkowicie niepowiązane wewnętrznie, po prostu mają Te same identyfikatory, które musiałbym zapytać.

  1. Czy istnieje ograniczenie liczby typów dokumentów osadzonych w dokumencie najwyższego poziomu, które mogłyby obniżyć wydajność?
  2. W jaki sposób rozwiązujecie problem posiadania centralnego dokumentu profilu, z którym większość dokumentów musi się wiązać przy przedstawianiu widoku na osobę?
  3. Czy używasz kluczy semi foreign wewnątrz MongoDb i czy masz pola z typami ObjectId, które mają unikalny identyfikator innego dokumentu zamiast osadzania ich?

Nie czuję, jakie podejście należy podjąć, kiedy. Dziękuję Ci bardzo!

+0

+1 za dobre pytanie. – Adelin

Odpowiedz

2
  1. Nie ma specjalnego ograniczenia w odniesieniu do wydajności. Im większy dokument, tym dłużej trwa transmisja przez przewód. Cały dokument jest zawsze pobierany.
  2. Robię to z referencjami. Możesz wybierać między prostymi ręcznymi odnośnikami a bazą danych DBRef, jak na tej stronie: http://www.mongodb.org/display/DOCS/Database+References
  3. Powyższy link dokumentuje jak uzyskać referencje w dokumencie w sposób częściowo zagraniczny. DBRef może być dobry do tego, co próbujesz zrobić, ale prosty podręcznik odniesienia jest bardzo wydajny.

Nie jestem pewien, czy istnieje ogólna reguła, dla której najlepsze jest podejście referencyjne. Ponieważ używam głównie Java lub Groovy, podoba mi się fakt, że otrzymałem zwrócony obiekt DBRef. Mogę sprawdzić ten typ danych i użyć go, aby zdecydować, jak obsługiwać odwołanie w sposób ogólny.

Używam więc prostego podręcznika do odwołań do różnych dokumentów w tym samym zbiorze, a DBRef do referencji w kolekcjach.

Mam nadzieję, że to pomaga.

+0

Najwyraźniej nie ma ustalonych reguł, tylko to, co jest bardziej wygodne, aby kodować. Przesłanie o przeniesienie dużego dokumentu ma swoje zalety, ponieważ zawsze musiałbym powiedzieć aplikacji, aby wybrała tylko wybrane pola, jeśli istnieje około 10 dokumentów osadzonych. Dzięki. –

+0

Cóż, istnieje kilka dobrych praktyk w odniesieniu do projektowania schematów, a niektóre z nich odnoszą się do korzystania z referencji. Warto zajrzeć: http://www.mongodb.org/display/DOCS/Schema+Design – dlaidlaw

Powiązane problemy