Skip to content

NoSQL-Datenmodellierung erklärt

Modellierungsmuster für Dokument-, Key-Value-, Wide-Column-, Graph- und Vektorspeicher — wann einbetten, referenzieren, denormalisieren oder in Buckets gruppieren.

NoSQL-Speicher tauschen feste Schemas und Joins gegen horizontale Skalierung. Jede Familie bildet Beziehungen auf ihre eigene Weise ab — daher diktiert das Zugriffsmuster die Struktur, nicht die Normalform.

Nachschlagetabelle · 28 Einträge
28 of 28 rows
Dokumente
Geschachtelte Subdokumente leben in einem übergeordneten Dokument statt in separaten Tabellen.One-to-few-Beziehungen, die zusammen gelesen werden. Eine Bestellung mit ihren Positionen. Ein Profil mit drei Adressen.
Ein Fremd-Id speichern, nicht die Daten. Auflösen per zweitem Read oder $lookup.Große, geteilte oder unabhängig aktualisierte Sub-Entitäten. Many-to-many-Verweise über Collections hinweg.
Das Parent bettet ein kurzes Array von Children ein; die gesamte Menge passt in ein Dokument und lädt als eines.Eine Handvoll Telefonnummern oder Präferenzen im Profil. Ein Read liefert Parent und Children zusammen.
Children leben in einer eigenen Collection; jedes trägt die Parent-Id, oder das Parent hält ein begrenztes Id-Array.Mengen, zu groß oder zu unabhängig zum Einbetten. Children per Parent-Id abfragen.
Das Child speichert die Parent-Id; das Parent listet Children nie, weil die Menge unbegrenzt ist.Events, Logs oder Votes an einem Host oder Nutzer. Children per Parent-Id filtern und paginieren.
Dokumente verschiedener Entitätstypen teilen sich eine Collection, unterschieden über ein Typ-Feld.Kommentare oder Notifications an vielen Parent-Arten, alle über einen Abfrageweg.
Ein paar extreme Entitäten werden aus der gemeinsamen Form herausgetrennt, damit Größe oder Traffic den Rest nicht verzerren.Promi-Konten, deren Follower-Listen oder Zähler das normale Dokument sprengen würden.
Jede Revision ist ein neues Dokument mit derselben Id und steigender Versionsnummer; die Abfrage wählt die neueste.Audit-Trails und Änderungshistorien, in denen alte Revisionen abfragbar bleiben.
Abgeleitete Werte werden zur Schreibzeit berechnet und neben den Daten gespeichert, die sie zusammenfassen.Summen, Ratings und Top-N, die sonst bei jedem Read eine Aggregation auslösen würden.
Key-Value & Wide-Column
DynamoDB-Designbegriff: viele Entitätstypen in einer Tabelle verdichten, mit überladenen Partition- und Sort Keys.Heterogene Items in einer Abfrage holen, ganz ohne Join.
Ein Key-Attribut dient vielen Entitätstypen, markiert durch Präfixe wie USER# oder ORDER#.Single-Table-Designs. Verwandte Items unter einer Partition bündeln und in einer Abfrage holen.
Ein Partition Key verteilt Zeilen auf Knoten; ein Sort Key ordnet jede Partition.Cassandra und DynamoDB. Range-Scans, geordnete Logs, hierarchische Composite Keys.
Mehrere Attribute stapeln sich zu einem Sort Key mit Trennzeichen — country#region#city — sodass ein Präfix-Match die Hierarchie abwärts läuft.Hierarchien und Facettenfilter. Eine geordnete Range-Abfrage ersetzt viele Index-Lookups.
Events in feste Fenster gruppieren — Stunde, Tag, Monat — unter eigenen Partitionen oder Tabellen.Metriken, Logs & IoT-Telemetrie. Begrenzt die Partitionsgröße und lässt kalte Daten auslaufen.
Read-lastige Felder über Datensätze hinweg duplizieren, sodass eine Abfrage nie einem zweiten Lookup nachjagt.Read-lastige Workloads, in denen Eventual Consistency tolerierbar und Storage billig ist.
Ein Secondary Index auf einem Attribut, das nur einige Items tragen; Items ohne es erscheinen nie im Index.Alternative Zugriffspfade. Die Sparse-Teilmenge finden — offene Orders, unverschickte Items — ohne Full Scan.
Zuerst die exakten Abfragen aufschreiben; das Tabellenlayout wird aus ihnen abgeleitet, nicht aus Entitäten oder Normalform.Schema-Arbeit in Cassandra und DynamoDB. Eine Tabelle pro Abfragefamilie; das Datenmodell kopiert die Frage.
Eine Abfrage muss viele Partitionen oder Knoten parallel treffen, weil kein Key zur Frage passt.Ein Smell zum Herausdesignen, kein Ziel. Die Tabelle neu keyen, sodass die häufige Abfrage auf einer Partition landet.
Kopien werden zur Schreibzeit in die Sicht jedes Readers geschoben oder zur Lesezeit gesammelt und gemerged.Feeds und Timelines. Write-Fan-out für kleine Audienzen, Read-Merge für riesige.
Ein vorberechnetes Abfrageergebnis als eigene Tabelle, aktuell gehalten zur Basis.Alternative Read-Shapes über einem Write-Pfad. Beantwortet Abfragen, die die Basistabelle nicht kann.
Graphen
Jede Kante ist eine Zeile oder ein Tupel, das von einem Quellknoten auf einen Zielknoten zeigt.Graph- und Property-Stores. Friend-of-friend-Lookups, Routing, Empfehlungen.
Jede Beziehung ist ein Dokument in einer eigenen Collection mit From- und To-Ids plus Link-Attributen.Graphen in Document-Stores. Attribute am Link selbst — Rating, Rolle, Timestamp.
Jeder Knoten speichert linke und rechte Zähler aus einem Depth-First-Lauf; ein Teilbaum liegt im Bereich seines Parents.Read-lastige Bäume. Eine BETWEEN-Abfrage liefert einen Teilbaum; Inserts nummerieren den Lauf neu.
Eine eigene Tabelle erfasst jedes Vorfahr-Nachkomme-Paar, einschließlich jedes Knotens auf Tiefe null.Ganze Zweige auf jeder Tiefe abfragen. Einfache Joins, bezahlt mit Storage und Wartung.
Property-Graphen hängen Key-Value-Attribute an Knoten und Kanten; RDF formuliert alles als Subjekt-Prädikat-Objekt-Tripel.Property-Graphen für reiche Traversierung (Neo4j); RDF für Linked Open Data und Ontologie-Austausch.
Vektoren
Ein hochdimensionales Float-Array liegt neben Metadaten. Ein ANN-Index findet nächste Nachbarn.Semantische Suche, RAG-Retrieval, Empfehlungen und Ähnlichkeit über unstrukturierte Inhalte.
Quelldokumente werden geteilt — nach Größe, Overlap oder Struktur — bevor jedes Stück separat embeddiert wird.RAG-Retrieval-Qualität. Chunk-Größe tauscht Precision gegen Recall; Overlap schützt geteilte Sätze.
Dense-Vector-Ähnlichkeit läuft neben Keyword-Matching; beide Ranglisten verschmelzen zu einem Ergebnis.Abfragen, die exakte Begriffe und Bedeutung zugleich brauchen, mit Metadaten-Filtern obendrauf.