sql >> Database teknologi >  >> NoSQL >> MongoDB

Denormalisering af data i MongoDB

Det er ikke altid, at normalisering til dødspunktet påfører præstationshits, men det er rigtigt, at jeg personligt ikke anvender den samme normalisering på MongoDB, som jeg gør SQL.

Hvis du er opmærksom på de normaliserede former ( http://en.wikipedia.org/wiki/Database_normalization ) Jeg kan godt lide at tro, at MongoDB går til 1NF og derefter tilbage til denormaliseret igen.

Åh ja det gør vi. Opdatering er en smerte, hvis data er duplikeret forkert.

Lad mig give dig et eksempel:category og product ville være to separate enheder, det er der ingen tvivl om. Disse to enheder er normaliserede (de gentagne data for product er blevet spioneret fra category ). En anden måde at tænke det på er:Kommer alle produkter kun til at eksistere i én kategori?

Så på enheder på øverste niveau, som du kan se, gælder de samme regler relativt, hvor 1NF nemt kan anvendes på MongoDB.

På forsiden af ​​duplikeringen ville du selvfølgelig ikke ønske at opbevare hvert produkt separat inden for hver kategori (jeg svarede nej til spørgsmålet ovenfor), så du vil naturligvis gerne adskille kategorier og produkter.

Du ville normalt have et mange-til-mange forhold her med en mellemnormaliseret tabel. Det er her, denormalisering kan komme ind i billedet. Du kan sige, at en kategori vil have en liste over produkter, der er unikke for den kategori, som sådan kan du denormalisere den mange-til-mange relationelle tabel i kategorirækken som en liste (eller omvendt ind i produktrækken). Dette vil ikke generere duplikering, da listen er unik for den kategori (mere end sandsynligt). Dette betyder naturligvis, at kategorien eller produkterne vil indeholde en liste _id s i den relaterede række i stedet for selve objektet.

Der er tidspunkter, hvor duplikering er nødvendig, hovedsageligt for optimering eller omgåelser for ikke at have JOINs; denne regel gælder også for SQL, hvis du nogensinde har lavet et stort nok websted.

Typiske brugsscenarier for duplikering er aggregerede felter af statistikker, som f.eks. en Facebook-poster delinger og kommentarer, og måske endda de 5 seneste kommentarer i det pågældende indlæg vil også blive duplikeret på indlægsrækken.

Så det handler ikke om at ignorere skemadesign, men mere om at tune det til MongoDBs egenskaber. Normalt, hvis du gør det, vil du opleve, at du naturligvis designer et godt skema.

Som en ekstra reference kan du henvise her:http://docs.mongodb.org/ manual/core/data-modeling




  1. Sådan skriver du følgende mongo-opslagsforespørgsel i Yii2

  2. mongodb få hele dokumentet fra en værdi

  3. Mongoose.js transaktioner

  4. Mongoose - Forespørg på det seneste dokument