Skip to content

NoSQL-datamodellering forklart

Modelleringsmønstre for dokument-, nøkkelverdi-, wide-column-, graf- og vektorlagre — når du bør bygge inn, referere, denormalisere eller gruppere i tidsvinduer.

NoSQL-lagre bytter faste skjemaer og joins mot horisontal skalering. Hver familie modellerer relasjoner på sin egen måte, så tilgangsmønsteret — ikke normalform — styrer strukturen.

Referansetabell · 28 oppføringer
28 of 28 rows
Dokument
Nestlede underdokumenter ligger inne i ett overordnet dokument, i stedet for i egne tabeller.Én-til-få-relasjoner som leses sammen. En ordre med ordrelinjene sine. En bruker med tre adresser.
Lagre en fremmed id, ikke dataene. Løs den opp med et nytt søk eller en $lookup.Store, delte eller selvstendig oppdaterte underentiteter. Mange-til-mange-lenker på tvers av samlinger.
Forelderen bygger inn en kort array med barn; hele settet passer i og lastes som ett dokument.Noen få telefonnumre eller innstillinger på en profil. Ett søk returnerer forelder og barn.
Barna ligger i sin egen samling; hvert barn bærer forelderens id, eller forelderen holder en avgrenset id-array.Samlinger som er for store eller for selvstendige til å bygges inn. Hent barna etter forelder-id.
Barnet lagrer forelderens id; forelderen lister aldri opp barna, fordi settet er ubegrenset.Hendelser, logger eller stemmer knyttet til en vert eller bruker. Filtrer barna etter forelder-id og paginer.
Dokumenter av ulike entitetstyper deler én samling, og skilles fra hverandre med et typefelt.Kommentarer eller varsler knyttet til mange slags foreldre, alle søkt på samme måte.
Noen få ekstreme entiteter skilles ut av den felles formen, slik at størrelsen eller trafikken deres ikke forvrenger resten.Kjendiskontoer hvis følgerlister eller tellere ellers ville utvokse det vanlige dokumentet.
Hver revisjon er et nytt dokument med samme id og et økende versjonsnummer; spørringen velger den nyeste.Revisjonsspor og redigeringshistorikk der gamle revisjoner forblir søkbare.
Avledede verdier beregnes ved skrivetid og lagres ved siden av dataene de oppsummerer.Summer, vurderinger og topp-N som ellers ville kjørt en aggregering ved hvert søk.
Nøkkelverdi og wide-column
DynamoDB-designbegrep: slå sammen mange entitetstyper i én tabell ved hjelp av overlastede partisjons- og sorteringsnøkler.Hent ulike elementtyper i én spørring, uten join.
Étt nøkkelattributt tjener mange entitetstyper, merket med prefikser som USER# eller ORDER#.Single-table-design. Samle beslektede elementer under én partisjon og hent dem i én spørring.
En partisjonsnøkkel sprer radene over noder; en sorteringsnøkkel ordner hver partisjon.Cassandra og DynamoDB. Intervallsøk, ordnede logger, hierarkiske sammensatte nøkler.
Stable flere attributter i én sorteringsnøkkel med skilletegn — country#region#city — slik at et prefikssøk går nedover i hierarkiet.Hierarkier og flerfasettede filtre. Étt ordnet intervallsøk erstatter mange indeksoppslag.
Grupper hendelser i faste vinduer — time, dag, måned — under egne partisjoner eller tabeller.Målinger, logger og IoT-telemetri. Begrenser partisjonsstørrelsen og faser ut kald data.
Dupliser lesetunge felter på tvers av poster, slik at en spørring aldri trenger et nytt oppslag.Lestunge arbeidsbelastninger der eventuell konsistens er akseptabelt og lagring er billig.
En sekundærindeks bygget på et attributt som bare noen elementer har; elementer uten det kommer aldri med i indeksen.Alternative tilgangsveier. Finn det sparsomme delsettet — åpne ordrer, usendte varer — uten en full tabellskanning.
Skriv ned de nøyaktige spørringene først; tabellayouten utledes fra dem, ikke fra entiteter eller normalform.Skjemaarbeid i Cassandra og DynamoDB. Én tabell per spørringsfamilie; datamodellen kopierer spørsmålet.
En spørring må treffe mange partisjoner eller noder parallelt, fordi ingen nøkkel passer til spørsmålet.En svak lukt som skal designes bort, ikke et mål. Legg om nøklene slik at den vanlige spørringen lander på én partisjon.
Kopier skyves til hver lesers visning ved skrivetid, eller samles inn og flettes ved lesetid.Strømmer og tidslinjer. Fan-out ved skriving for små grupper, ved lesing for enorme.
Et forhåndsberegnet spørringsresultat lagret som sin egen tabell, holdt oppdatert etter hvert som basen endres.Alternative leseformer over én skrivevei. Betjener spørringer som basistabellen ikke kan svare på.
Graf
Hver kant er en rad eller tuppel som peker fra en kildenode til en målnode.Graf- og egenskapslagre. Venner-av-venner-oppslag, ruting, anbefalinger.
Hver relasjon er et dokument i sin egen samling, med fra-id og til-id pluss koblingsattributter.Grafer i dokumentlagre. Attributter på selve koblingen — vurdering, rolle, tidsstempel.
Hver node lagrer venstre- og høyretellere fra en dybde-først-gjennomgang; et deltre ligger innenfor forelderens intervall.Lestunge trær. Én BETWEEN-spørring returnerer et deltre; innsettinger nummererer gjennomgangen på nytt.
En egen tabell registrerer hvert forfedre-til-etterkommer-par, inkludert hver node på dybde null.Hele grein-spørringer på enhver dybde. Enkle joins, betalt med lagring og vedlikehold.
Egenskapsgrafer knytter nøkkelverdi-attributter til noder og kanter; RDF uttrykker alt som subjekt-predikat-objekt-tripler.Egenskapsgrafer for rike traverseringer (Neo4j); RDF for lenkede åpne data og ontologiutveksling.
Vektor
En høydimensjonal float-array ligger ved siden av metadata. En ANN-indeks finner nærmeste naboer.Semantisk søk, RAG-henting, anbefalinger og likhet over ustrukturert innhold.
Kildedokumenter deles opp — etter størrelse, overlapp eller struktur — før hvert stykke embeddes for seg.Kvalitet på RAG-henting. Chunk-størrelsen balanserer presisjon mot gjenkalling; overlapp beskytter setninger som deles.
Tett vektorlikhet kjører ved siden av nøkkelordsøk; de to rangerte listene flettes til ett resultat.Spørringer som trenger både nøyaktige termer og mening, med metadatafiltre på toppen.