Modelleringsmønstre for dokument-, key-value-, wide-column-, graf- og vektorlagre — hvornår man skal indlejre, referere, denormalisere eller gruppere i tidsvinduer.
NoSQL-lagre veksler faste skemaer og joins til horisontal skalering. Hver familie modellerer relationer på sin egen måde, så adgangsmønstret — ikke normalformen — bestemmer strukturen.
Referencetabel · 28 poster
NoSQL-datamodelleringExplained
28 of 28 rows
Dokumenter
Indlejrede underdokumenter lever inde i ét forældredokument i stedet for separate tabeller.
One-to-few-relationer, der læses sammen. En ordre med dens linjer. En bruger med tre adresser.
Gem et fremmed id, ikke dataene. Løs det med et andet læs eller et $lookup.
Store, delte eller uafhængigt opdaterede underentiteter. Many-to-many-links på tværs af samlinger.
Forælderen indlejrer et kort array af børn; hele sættet passer og indlæses som ét dokument.
En håndfuld telefonnumre eller præferencer på en profil. Ét læs returnerer forælder og børn.
Børn lever i deres egen samling; hvert barn bærer forælder-id'et, eller forælderen holder et afgrænset id-array.
Sæt, der er for store eller for uafhængige til at indlejre. Forespørg børn efter forælder-id.
Barnet gemmer forælder-id'et; forælderen oplister aldrig børn, fordi sættet er ubegrænset.
Events, logs eller stemmer knyttet til en host eller bruger. Filtrér børn efter forælder-id og paginér.
Dokumenter af forskellige entitetstyper deler én samling, adskilt af et typefelt.
Kommentarer eller notifikationer knyttet til mange slags forældre, alle forespurgt på én måde.
Et par ekstreme entiteter skilles ud af den fælles form, så deres størrelse eller trafik ikke forvrider resten.
Berømthedskonti, hvis follower-lister eller tællere ville vokse ud over det normale dokument.
Hver revision er et nyt dokument med samme id og et stigende versionsnummer; forespørgslen vælger den nyeste.
Revisionsspor og redigeringshistorik, hvor gamle revisioner forbliver forespørgelige.
Afledte værdier beregnes ved skrivetid og gemmes ved siden af de data, de opsummerer.
Totaler, vurderinger og top-N, som ellers ville køre en aggregering ved hvert læs.
Key-value & wide-column
DynamoDB-designudtryk: saml mange entitetstyper i én tabel med overbelastede partitions- og sorteringsnøgler.
Hent heterogene items i én forespørgsel uden join.
Én nøgleattribut tjener mange entitetstyper, markeret med præfikser som USER# eller ORDER#.
Single-table-designs. Klyng relaterede items under én partition og hent dem i én forespørgsel.
En partitionsnøgle spreder rækker over noder; en sorteringsnøgle ordner hver partition.
Cassandra og DynamoDB. Range-scans, ordnede logs, hierarkiske sammensatte nøgler.
Stak flere attributter i én sorteringsnøgle med skilletegn — country#region#city — så et præfiks-match går ned ad hierarkiet.
Hierarkier og multifacette-filtre. Én ordnet range-forespørgsel erstatter mange indeks-opslag.
Gruppér events i faste vinduer — time, dag, måned — under dedikerede partitioner eller tabeller.
Metrikker, logs og IoT-telemetri. Begrænser partitionsstørrelse og lader kold data udløbe.
Duplikér læsetunge felter på tværs af poster, så en forespørgsel aldrig jagter et andet opslag.
Læsetunge arbejdsbelastninger, hvor eventual consistency er tolerabel, og lagring er billig.
Et sekundært indeks over en attribut, som kun nogle items bærer; items uden den kommer aldrig i indekset.
Alternative adgangsveje. Find den sparsomme delmængde — åbne ordrer, ikke-afsendte items — uden et fuldt scan.
Skriv de præcise forespørgsler først; tabellayoutet udledes af dem, ikke af entiteter eller normalform.
Skemaarbejde i Cassandra og DynamoDB. Én tabel pr. forespørgselsfamilie; datamodellen kopierer spørgsmålet.
En forespørgsel skal ramme mange partitioner eller noder parallelt, fordi ingen nøgle matcher spørgsmålet.
En smell, der skal designes væk, ikke et mål. Omlæg nøglerne, så den almindelige forespørgsel lander på én partition.
Kopier skubbes ud til hver læsers view ved skrivetid, eller samles og flettes ved læsetid.
Feeds og timelines. Skrivetids-fan-out til små målgrupper, læsetid til enorme.
Et forhåndsbygget forespørgselsresultat gemt som sin egen tabel, holdt opdateret efterhånden som basen ændres.
Alternative læseformer over én skrivevej. Betjener forespørgsler, som basistabellen ikke kan svare.
Grafer
Hver kant er en række eller tuple, der peger fra en kildeknude til en målknude.
Graf- og property-lagre. Friend-of-friend-opslag, routing, anbefalinger.
Hver relation er et dokument i sin egen samling, med from- og to-id'er plus linkattributter.
Grafer i dokumentlagre. Attributter på selve linket — vurdering, rolle, tidsstempel.
Hver knude gemmer venstre og højre tællere fra en dybde-først-gennemgang; et deltræ lever inden for forælderens interval.
Læsetunge træer. Én BETWEEN-forespørgsel returnerer et deltræ; indsættelser omnummererer gennemgangen.
En dedikeret tabel registrerer hvert forfæder-til-efterkommer-par, inklusive hver knude på dybde nul.
Forespørgsler på hele grene i enhver dybde. Enkle joins, betalt med lagring og vedligehold.
Propertygrafer hænger nøgleværdi-attributter på knuder og kanter; RDF udtrykker alt som subjekt-prædikat-objekt-tripler.
Propertygrafer til rig traversal (Neo4j); RDF til linked open data og ontologiudveksling.
Vektorer
Et højdimensionelt float-array ligger ved siden af metadata. Et ANN-indeks finder nærmeste naboer.
Semantisk søgning, RAG-retrieval, anbefalinger og lighed over ustruktureret indhold.
Kildedokumenter deles — efter størrelse, overlap eller struktur — før hvert stykke embeddes for sig.
RAG-retrieval-kvalitet. Chunkstørrelse veksler præcision mod recall; overlap beskytter delte sætninger.
Tæt vektorlighed kører ved siden af nøgleordsmatchning; de to rangerede lister smelter sammen til ét resultat.
Forespørgsler, der kræver nøjagtige termer og betydning på én gang, med metadatafiltre ovenpå.