MongoDB ist schemalos, da es Daten in Form von Dokumenten speichert, typischerweise unter Verwendung von BSON (Binary JSON). Jedes Dokument in einer Sammlung kann seine eigene Struktur haben, was bedeutet, dass Felder und ihre Datentypen nicht vordefiniert werden müssen.
Beispiel:
Diese Flexibilität ermöglicht es MongoDB, sich an sich ändernde Datenmodelle anzupassen, ohne dass Schemaänderungen erforderlich sind.
MongoDB bietet zwei Hauptansätze zur Modellierung von Beziehungen zwischen Dokumenten: Einbettung und Referenzierung.
Einbettung: Speichern verwandter Daten in einem einzigen Dokument.
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
Referenzierung: Speichern verwandter Daten in separaten Dokumenten und Verwenden von Referenzen (d. h. ObjectIds), um sie zu verknüpfen.
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
Eine Eins-zu-Viele-Beziehung wird typischerweise durch Einbettung der „vielen“ Elemente in das „Eins“-Dokument oder durch Referenzierung modelliert.
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
// Parent document { "_id": 1, "name": "John" } // Child document { "addressId": 1, "street": "123 Main St", "city": "City A" }
Eine begrenzte Sammlung ist eine Sammlung fester Größe, die automatisch die ältesten Dokumente überschreibt, wenn sie ihre Größenbeschränkung erreicht. Begrenzte Sammlungen eignen sich ideal für Szenarien, in denen die neuesten Daten am wichtigsten sind, z. B. Protokolle oder Ereignisdaten.
Eigenschaften:
Beispiel:
Erstellen Sie eine begrenzte Sammlung mit einer Größenbeschränkung von 1 MB und maximal 1000 Dokumenten:
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
In MongoDB kann sich die Dokumentgröße direkt auf die Leistung auswirken. Die maximale Größe eines Dokuments beträgt 16 MB. Dokumente, die dieser Größe nahekommen, können:
Um die Leistung zu verbessern, ist es wichtig, Dokumente kompakt zu halten und übermäßiges Wachstum zu vermeiden, insbesondere in Umgebungen mit hohem Schreibaufwand.
Denormalisierung umfasst das Kopieren von Daten über mehrere Dokumente hinweg, um die Notwendigkeit von Verknüpfungen zu reduzieren. Durch die Einbettung verwandter Daten kann MongoDB die Durchführung mehrerer Abfragen oder Verknüpfungen vermeiden, was zu schnelleren Lesevorgängen führt.
Beispiel: Anstatt auf Produkte in einer Bestellung zu verweisen, betten Sie Produktdetails direkt in das Bestelldokument ein:
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
GridFS ist eine Spezifikation zum Speichern und Abrufen großer Dateien (größer als 16 MB) in MongoDB. Es teilt große Dateien in Blöcke (normalerweise 255 KB) auf und speichert sie als Dokumente in zwei Sammlungen: fs.files und fs.chunks.
Beispiel: Speichern einer großen Bilddatei:
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
Für hierarchische Daten können Sie je nach Tiefe und Komplexität der Hierarchie entweder Einbettung oder Referenzierung verwenden.
{ "_id": 1, "name": "John Doe", "orders": [ { "orderId": 101, "total": 50 }, { "orderId": 102, "total": 75 } ] }
// Customer document { "_id": 1, "name": "John Doe" } // Order document { "orderId": 101, "customerId": 1, "total": 50 }
Ein TTL-Index löscht Dokumente nach einem bestimmten Zeitraum automatisch aus einer Sammlung, was ihn für ablaufende Daten wie Sitzungsinformationen oder Protokolle nützlich macht.
Syntax:
{ "_id": 1, "name": "John", "addresses": [ { "street": "123 Main St", "city": "City A" }, { "street": "456 Elm St", "city": "City B" } ] }
Eine viele-zu-viele-Beziehung kann modelliert werden, indem in jedes Dokument Arrays von Referenzen eingebettet werden oder indem eine dritte Sammlung zum Speichern der Beziehungen erstellt wird.
// Parent document { "_id": 1, "name": "John" } // Child document { "addressId": 1, "street": "123 Main St", "city": "City A" }
db.createCollection("logs", { capped: true, size: 1048576, max: 1000 })
MongoDB bietet flexible Schema-Designfunktionen, wodurch es an verschiedene Anwendungsfälle angepasst werden kann, einschließlich komplexer Beziehungen und Datenmodellierungsstrategien. Durch die richtige Wahl des Schemadesigns können Sie die Leistung und Skalierbarkeit Ihrer Anwendungen verbessern.
Hallo, ich bin Abhay Singh Kathayat!
Ich bin ein Full-Stack-Entwickler mit Fachwissen sowohl in Front-End- als auch in Back-End-Technologien. Ich arbeite mit einer Vielzahl von Programmiersprachen und Frameworks, um effiziente, skalierbare und benutzerfreundliche Anwendungen zu erstellen.
Sie können mich gerne unter meiner geschäftlichen E-Mail-Adresse erreichen: kaashshorts28@gmail.com.
Das obige ist der detaillierte Inhalt vonEntwerfen effizienter Datenmodelle in MongoDB: Schemalos, Beziehungen und Leistungsoptimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!