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

Relacje MongoDB:osadzanie czy odwołanie?

To bardziej sztuka niż nauka. Dokumentacja Mongo na temat schematów jest dobrym punktem odniesienia, ale oto kilka rzeczy do rozważenia:

  • Włóż jak najwięcej

    Radość z bazy danych dokumentów polega na tym, że eliminuje ona wiele złączeń. Twoim pierwszym odruchem powinno być umieszczenie jak najwięcej w jednym dokumencie. Ponieważ dokumenty MongoDB mają strukturę i możesz efektywnie wykonywać zapytania w ramach tej struktury (oznacza to, że możesz wziąć część dokumentu, której potrzebujesz, więc rozmiar dokumentu nie powinien Cię zbytnio martwić), nie ma natychmiastowej potrzeby normalizacji danych, takich jak zrobiłbyś to w SQL. W szczególności wszelkie dane, które nie są przydatne poza dokumentem nadrzędnym, powinny być częścią tego samego dokumentu.

  • Oddziel dane, do których można się odwoływać z wielu miejsc, we własnej kolekcji.

    Jest to nie tyle kwestia „przestrzeni pamięci”, co kwestia „spójności danych”. Jeśli wiele rekordów będzie odnosić się do tych samych danych, bardziej wydajne i mniej podatne na błędy jest aktualizowanie jednego rekordu i przechowywanie odniesień do niego w innych miejscach.

  • Uwagi dotyczące rozmiaru dokumentu

    MongoDB nakłada limit rozmiaru 4 MB (16 MB z 1,8) na pojedynczy dokument. W świecie GB danych brzmi to mało, ale to także 30 tysięcy tweetów lub 250 typowych odpowiedzi na Stack Overflow lub 20 migoczących zdjęć. Z drugiej strony jest to znacznie więcej informacji, niż można by chcieć jednorazowo przedstawić na typowej stronie internetowej. Najpierw zastanów się, co ułatwi Twoje zapytania. W wielu przypadkach obawy o rozmiary dokumentów będą powodowały przedwczesną optymalizację.

  • Złożone struktury danych:

    MongoDB może przechowywać dowolne głęboko zagnieżdżone struktury danych, ale nie może ich skutecznie przeszukiwać. Jeśli Twoje dane tworzą drzewo, las lub wykres, faktycznie musisz przechowywać każdy węzeł i jego krawędzie w osobnym dokumencie. (Pamiętaj, że istnieją magazyny danych specjalnie zaprojektowane dla tego typu danych, które również należy wziąć pod uwagę)

    Zwrócono również uwagę, że nie jest możliwe zwrócenie podzbioru elementów w dokumencie. Jeśli musisz wybrać kilka fragmentów każdego dokumentu, łatwiej będzie je oddzielić.

  • Spójność danych

    MongoDB dokonuje kompromisu między wydajnością a spójnością. Zasadą jest, że zmiany w pojedynczym dokumencie są zawsze atomic, podczas gdy aktualizacje wielu dokumentów nigdy nie powinny być traktowane jako atomic. Nie ma też możliwości "zablokowania" rekordu na serwerze (można to wbudować w logikę klienta używając np. pola "lock"). Podczas projektowania schematu zastanów się, w jaki sposób zachowasz spójność danych. Ogólnie rzecz biorąc, im więcej trzymasz w dokumencie, tym lepiej.

W przypadku tego, co opisujesz, osadzałbym komentarze i nadawał każdemu komentarzowi pole identyfikatora z identyfikatorem obiektu. ObjectID ma osadzony znacznik czasu, więc możesz go użyć zamiast tworzyć w, jeśli chcesz.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Monitorowanie instancji MongoDB za pomocą usługi monitorowania MongoDB (MMS)

  2. Jak tworzyć indeksy w MongoDB przez .NET

  3. Domyślna biblioteka obietnic Mongoose jest przestarzała w stosie MEAN

  4. Znajdź wszystkie dokumenty w ciągu ostatnich n dni

  5. Rosnące znaczenie MongoDB w dziedzinie nauki o danych