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

Denormalizacja danych w MongoDB

Nie zawsze normalizacja do punktu śmierci powoduje spadki wydajności, ale prawdą jest, że osobiście nie stosuję tej samej normalizacji do MongoDB, co do SQL.

Jeśli znasz znormalizowane formularze ( http://en.wikipedia.org/wiki/Database_normalization ) Lubię myśleć, że MongoDB przechodzi do 1NF, a następnie wraca do stanu denormalizacji.

O tak, robimy. Aktualizacja jest uciążliwa, jeśli dane są źle zduplikowane.

Podam przykład:category i product byłyby dwoma oddzielnymi podmiotami, nie można temu zaprzeczyć. Te dwie jednostki są znormalizowane (powtarzające się dane product został wydzielony z category ). Inny sposób myślenia to:Czy wszystkie produkty będą istnieć tylko w jednej kategorii?

Tak więc na encjach najwyższego poziomu, jak widać, stosują się te same zasady, a 1NF można łatwo zastosować do MongoDB.

Jeśli chodzi o powielanie, oczywiście nie chciałbyś przechowywać każdego produktu osobno w ramach każdej kategorii (odpowiedziałem „nie” na powyższe pytanie), więc naturalnie chciałbyś oddzielić kategorie i produkty.

Normalnie miałbyś tutaj relację wiele-do-wielu ze średnią znormalizowaną tabelą. Tutaj może wkroczyć denormalizacja. Można powiedzieć, że kategoria będzie miała listę produktów, które są unikalne dla tej kategorii, w związku z czym można zdenormalizować relacyjną tabelę wiele-do-wielu do wiersza kategorii jako listę (lub odwrotnie do rzędu produktów). Nie spowoduje to duplikacji, ponieważ ta lista jest unikalna dla tej kategorii (bardziej niż prawdopodobne). To oczywiście oznacza, że ​​kategoria lub produkty będą zawierać listę _id s powiązanego wiersza zamiast samego obiektu.

Są chwile, w których duplikacja jest konieczna, głównie w celu optymalizacji lub obejścia braku JOIN; ta zasada dotyczy również SQL, jeśli kiedykolwiek stworzyłeś wystarczająco dużą witrynę.

Typowe scenariusze użycia powielania to agregacja pól statystyk, takich jak posty na Facebooku i komentarze, a być może nawet 5 ostatnich komentarzy do tego posta zostanie zduplikowanych w wierszu posta.

Nie chodzi więc o ignorowanie projektu schematu, ale raczej o dostrojenie go pod kątem charakterystyk MongoDB. Zwykle, jeśli to zrobisz, przekonasz się, że oczywiście zaprojektujesz dobry schemat.

Jako dodatkowe odniesienie możesz odwołać się tutaj:http://docs.mongodb.org/ ręczne/rdzeń/modelowanie danych




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mangusta - metoda „zapisz” nie istnieje

  2. Max i grupa w Mongodb

  3. MongoDB findAndModify()

  4. Utwórz drzewo JSON w Node.Js z MongoDB

  5. Mongoose wydaje się zawodzić po cichu