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

Baza danych Mongodb Schema Design ze współdzielonymi danymi

Twoje wyzwanie wynika z faktu, że Prop_Info muszą być pobierane przez oba zapytania. Utrudnia to ustalenie, w której kolekcji Mongo powinien się znajdować.

W MongoDB tworzysz schemat dokumentu z idealnym celem, aby pojedynczy dokument zawierał wszystkie informacje potrzebne do wzorców zapytań. W przypadku, gdy potrzebujesz mieć te same dane D (np. Prop_Info w Twoim przypadku) zwrócone przez dwa oddzielne zapytania dotyczące dwóch oddzielnych kolekcji A i B , musisz wybrać jedną z trzech strategii:

  1. Zduplikuj D w dokumentach obu A i B i wymusić spójność z kodem. Jest to zazwyczaj wybór projektowy systemów o wysokiej wydajności, które chcą wyeliminować potrzebę drugiego zapytania, nawet jeśli odbywa się to kosztem dodatkowej złożoności kodu po stronie wstawiania/aktualizacji i z pewnymi potencjalnymi problemami ze spójnością, ponieważ Mongo nie jest ACID.

  2. Umieść D w A i zapisz referencję (DBRef lub inną kombinację pól identyfikujących) w B aby można było się do niego dostać za pomocą drugiego zapytania. Jest to zazwyczaj wybór projektu, gdy liczba zapytań do A przekracza liczbę zapytań do B . Zachowuje D lokalne do częściej wyszukiwanej kolekcji. W tym wzorcu projektu schematu wystarczy wykonać drugie zapytanie podczas zapytania B .

  3. Umieść D w nowej kolekcji C i wykonaj do niego drugie zapytanie z obu A i B . Jest to zazwyczaj wybór projektu w obliczu bardzo niepewnych przyszłych wymagań, w których nie jest jasne, jakie byłyby kompromisy, jeśli zdecydujesz się na (1) lub (2) powyżej. Jest to najbardziej „relacyjny” schemat i ten, który zmusi Cię do wykonania drugiego zapytania, gdy zapytasz zarówno A i B .

Wybrana strategia zależy od Twojej domeny, wzorców zapytań, wsparcia, jakie otrzymujesz ze struktury mapowania obiektowo-relacyjnego (ORM) (jeśli go używasz), a także od Twoich preferencji.

W sytuacjach, z którymi się spotkałem, nigdy nie wybrałem (3). Używałem (1) w sytuacjach o wysokiej wydajności (systemy analityczne). Użyłem (2) wszędzie indziej, ponieważ wzorce dostępu do zapytań sprawiły, że stało się oczywiste, gdzie powinny znajdować się „udostępnione” dane.

Po wybraniu strategii, jeśli nadal potrzebujesz pomocy, opublikuj kolejne pytanie SO, które koncentruje się na problemie projektowania schematu przy wybranej strategii.

Trzy końcowe wskazówki:

  1. Jeśli udostępnione dane D ma wielokrotność relacji większą niż 1 użyj tablicy. Możesz indeksować całe tablice i precyzyjnie wykonywać zapytania wewnątrz tablic, używając $elemMatch .

  2. Aby zaktualizować D w strategii (1) lub (2) użyj modyfikatora atomowego MongoDB operacje , z których wiele jest zaprojektowanych do działania na tablicach.

  3. To pytanie SO obejmuje wzorzec zapytania DBRef dwa w odpowiedzi @Stennie. (@Stennie pracuje dla 10gen, markerów MongoDB.)

Powodzenia!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB — zapytania dotyczące projekcji

  2. Aktualizacja rekordu za pomocą mangusty

  3. Najlepszy język programowania do implementacji algorytmu DBSCAN odpytującego bazę danych MongoDB?

  4. Jak naprawić mój mongodb?

  5. Czy ktoś korzystał z obiektowej bazy danych z dużą ilością danych?