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

MongoDB-relationer for objekter

Det kommer an på.

Det afhænger af, hvor mange af hver af disse typer objekter, du forventer at have. Kan du passe dem alle ind i et enkelt MongoDB-dokument for en given bruger? Sandsynligvis ikke.

Det afhænger af relationerne – er brugerkonto et en-til-mange- eller et mange-til-mange-forhold? Hvis det er én til mange, og antallet af konti er lille, kan du vælge at placere dem i en IList på et brugerdokument.

Du kan stadig modellere relationer i MongoDB med separate samlinger MEN der er ingen joins i databasen, så du skal gøre det i kode. At indlæse en bruger og derefter indlæse deres konti kan være helt fint ud fra et præstationsperspektiv.

Du kan indeksere I arrays på dokumenter. Tænk ikke på et indeks som blot at være et indeks på et simpelt felt på et dokument (som SQL). Du kan f.eks. bruge en Tag-samling på et dokument og indeksere i tags. (Se http://www.mongodb.org/display/DOCS/Index #Index-Arrays )

Når du henter eller skriver data, kan du foretage en delvis læsning og en delvis skrivning af ethvert dokument. (se http://www.mongodb.org/display /DOCS/Henter+en+Undersæt+af+felter )

Og endelig, når du ikke kan se, hvordan du får det, du ønsker ved hjælp af samlinger og indekser, kan du muligvis opnå det ved at bruge kortreducering. For at finde alle de tags, der aktuelt er i brug, sorteret efter deres brugsfrekvens, skal du kortlægge hvert dokument udsender de tags, der bruges i det, og så ville du reducere det sæt for at få det ønskede resultat. Du kan derefter gemme resultatet af det kort-reduktion permanent og kun opdatere det, når du har brug for det.

En yderligere bekymring:Du nævner beregning af totaler efter tag. Hvis du ønsker transaktionskonsistens i regnskabskvalitet, er MongoDB måske ikke det rigtige valg for dig. "Eventual-consistency" er navnet på spillet for NoSQL-datalagre, og de passer generelt ikke godt til finansielle transaktioner. For eksempel er det ligegyldigt, om en bruger ser et blogindlæg med 3 kommentarer, mens en anden ser 4, fordi de rammer forskellige replika-kopier, der ikke er synkroniseret endnu, men for en finansiel rapport betyder den slags konsistens noget - din rapporten hænger måske ikke sammen!




  1. Procentdel af OR-tilstande matchede i mongodb

  2. Symfony (PHP framework) og MongoDB (eller enhver json-baseret database)

  3. Mongodb scala driver codec til egenskaber og nedarvede klasser

  4. Hvad er forskellen mellem COUNT_SCAN og IXSCAN?