sql >> Databáze >  >> NoSQL >> MongoDB

Denormalizace dat v MongoDB

Ne vždy normalizace k smrti způsobí zásahy do výkonu, ale je pravda, že já osobně na MongoDB neaplikuji stejnou normalizaci jako na SQL.

Pokud jste si vědomi normalizovaných formulářů ( http://en.wikipedia.org/wiki/Database_normalization ) Rád si myslím, že MongoDB přejde na 1NF a pak se vrátí zpět k denormalizovanému.

Ach ano, máme. Aktualizace je bolest, pokud jsou data duplikována špatně.

Dovolte mi uvést příklad:category a product by byly dvě samostatné entity, to nelze popřít. Tyto dvě entity jsou normalizovány (opakující se data product byl vyřazen z category ). Jiný způsob uvažování je:Budou všechny produkty existovat pouze v jedné kategorii?

Takže na entitách nejvyšší úrovně, jak vidíte, relativně platí stejná pravidla, přičemž 1NF lze snadno aplikovat na MongoDB.

Na začátku duplikace byste samozřejmě nechtěli ukládat každý produkt samostatně v každé kategorii (na otázku výše jsem odpověděl ne), takže byste přirozeně chtěli oddělit kategorie a produkty.

Normálně byste zde měli vztah mnoho k mnoha se střední normalizovanou tabulkou. Zde může přijít na řadu denormalizace. Můžete říci, že kategorie bude mít seznam produktů, které jsou jedinečné pro danou kategorii jako takovou, můžete denormalizovat relační tabulku many-to-many do řádku kategorie jako seznam. (nebo naopak do produktové řady). Toto nebude generovat duplikaci, protože tento seznam je jedinečný pro danou kategorii (více než pravděpodobné). To samozřejmě znamená, že kategorie nebo produkty by obsahovaly seznam _id s souvisejícího řádku namísto samotného objektu.

Jsou chvíle, kdy je duplikace nezbytná, hlavně kvůli optimalizaci nebo obcházení neexistence JOINů; toto pravidlo platí také pro SQL, pokud jste někdy vytvořili dostatečně velký web.

Typickým scénářem použití duplikace jsou agregační pole statistik, jako je sdílení a komentáře příspěvků na Facebooku a možná i 5 nejnovějších komentářů tohoto příspěvku by se také duplikovalo do řádku příspěvku.

Nejde tedy o ignorování návrhu schématu, ale spíše o jeho vyladění pro charakteristiky MongoDB. Normálně, když to uděláte, zjistíte, že přirozeně navrhnete dobré schéma.

Jako další odkaz můžete odkazovat zde:http://docs.mongodb.org/ manuální/core/data-modeling




  1. Jak mohu přejmenovat pole pro všechny dokumenty v MongoDB?

  2. GAE nemůže vyhledat záznam SRV pro instanci atlasu mongodb

  3. Proč je výkon Redis SET lepší než GET?

  4. Použití UUID v mongoose pro ObjectID reference