Dokumentendatenbanken bieten eine Reihe von Vorteilen, darunter:
Aufgrund dieser Vorteile sind Dokumentendatenbanken Allzweckdatenbanken, die in einer Vielzahl von Anwendungsfällen und Branchen eingesetzt werden können.
Dokumentdatenbanken gelten als nicht-relationale (oder NoSQL). Datenbanken. Anstatt Daten in festen Zeilen und Spalten zu speichern, verwenden Dokumentendatenbanken flexible Dokumente. Dokumentdatenbanken sind die beliebteste Alternative zu relationalen Datenbanken in Tabellenform. Erfahren Sie mehr über NoSQL-Datenbanken.
Ein Dokument ist ein Datensatz in einer Dokumentdatenbank. Ein Dokument speichert normalerweise Informationen über ein Objekt und alle zugehörigen Metadaten.
Dokumente speichern Daten in Feld-Werte-Paaren. Die Werte können verschiedene Typen und Strukturen haben, darunter Zeichenfolgen, Zahlen, Daten, Arrays oder Objekte. Dokumente können in Formaten wie JSON und BSON und XML gespeichert werden.
So sieht ein JSON-Dokument aus, das Informationen über einen Benutzer namens Tom speichert.
{
"ID": 1,
"Vorname": "Tom",
"E-Mail": "tom@example.com",
"Mobiltelefon": "765-555-5555",
"Vorlieben": [
"Mode",
"Spas",
"Einkaufen"
],
"Unternehmen": [
{
"Name": "Entertainment 1080",
"Partner": "Jean",
"Status": "Insolvent",
"Gründungsdatum": {
"$date": "2012-05-19T04:00:00Z"
}
},
{
"Name": "Swag for Tweens",
"Gründungsdatum": {
"$date": "2012-11-01T04:00:00Z"
}
}
]
}Eine Sammlung ist eine Gruppe von Dokumenten. In Sammlungen werden normalerweise Dokumente mit ähnlichem Inhalt gespeichert.
Da Dokumentdatenbanken über flexible Schemata verfügen, müssen nicht alle Dokumente in einer Sammlung dieselben Felder aufweisen. Einige Dokumentdatenbanken bieten eine Schemaüberprüfung an. Das Schema kann bei Bedarf auch gesperrt werden.
Wenn wir mit dem obigen Beispiel fortfahren, könnte das Dokument mit Informationen über Tom in einer Sammlung mit dem Namen „Benutzer“ gespeichert werden. Um Informationen über andere Benutzer zu speichern, könnten der „Benutzer“-Sammlung weitere Dokumente hinzugefügt werden. Beispielsweise könnte das folgende Dokument, das Informationen über Donna enthält, der Sammlung „Benutzer“ hinzugefügt werden.
{
"ID": 2,
"Vorname": "Donna",
"E-Mail": "donna@example.com",
"Ehepartner": "Joe",
"Likes": [
"Spas",
"Einkaufen",
"Live-Tweeting"
],
"Unternehmen": [
{
"Name": "Castle Realty",
"Status": "Gedeihend",
"Gründungsdatum": {
"$date": "2013-11-21T04:00:00Z"
}
}
]
}Beachten Sie, dass das Dokument für Donna nicht dieselben Felder enthält wie das Dokument für Tom. Die „Benutzer“-Sammlung nutzt ein flexibles Schema, um die für jeden Benutzer vorhandenen Informationen zu speichern.
Dokumentdatenbanken verfügen typischerweise über eine API oder Abfragesprache, die es Entwicklern ermöglicht, CRUD-Operationen (Erstellen, Lesen, Aktualisieren und Löschen) auszuführen.
Dokumentdatenbanken verfügen über die folgenden Hauptfunktionen:
Drei Schlüsselfaktoren unterscheiden Dokumentendatenbanken von relationalen Datenbanken:
1. Die Intuitivität des Datenmodells: Dokumente entsprechen den Objekten im Code, was die Arbeit mit ihnen viel natürlicher macht. Es besteht keine Notwendigkeit, Daten über Tabellen hinweg zu zerlegen, teure Joins durchzuführen oder eine separate ORM-Schicht (Object Relational Mapping) zu integrieren. Daten, auf die gemeinsam zugegriffen wird, werden gemeinsam gespeichert, sodass Entwickler weniger Code schreiben müssen und Endbenutzer eine höhere Leistung erzielen.
2. Die Allgegenwärtigkeit von JSON-Dokumenten: JSON hat sich als etablierter Standard für den Datenaustausch und die Speicherung von Daten durchgesetzt. JSON-Dokumente sind leicht, sprachunabhängig und menschenlesbar. Dokumente sind eine Obermenge aller anderen Datenmodelle, sodass Entwickler die Daten so strukturieren können, wie es ihre Anwendungen benötigen – Rich Objects, Schlüssel-Wert-Paare, Tabellen, Geodaten und Zeitreihen oder die Knoten und Kanten eines Graphen.
3. Die Flexibilität des Schemas: Das Schema eines Dokuments ist dynamisch und selbstbeschreibend, sodass Entwickler es nicht zuerst in der Datenbank vordefinieren müssen. Die Felder können von Dokument zu Dokument unterschiedlich sein. Entwickler können die Struktur jederzeit ändern, um störende Schemamigrationen zu vermeiden. Einige Dokumentdatenbanken bieten eine Schemaüberprüfung an. Sie können optional Regeln zur Steuerung von Dokumentstrukturen durchgesetzt werden.
Erfahren Sie mehr über NoSQL im Vergleich zu relationalen Datenbanken.
Entwickler empfinden die Arbeit mit Daten in Dokumenten häufig als einfacher und intuitiver als die Arbeit mit Daten in Tabellen. Die Dokumente entsprechen den Datenstrukturen der meisten gängigen Programmiersprachen. Die Entwickler müssen sich nicht mehr darum kümmern, zusammengehörige Daten beim Speichern manuell auf mehrere Tabellen aufzuteilen oder beim Abrufen wieder zusammenzufügen. Sie müssen außerdem kein ORM verwenden, das die Datenbearbeitung für sie bewältigt. Stattdessen können sie ganz einfach direkt in ihren Anwendungen mit den Daten arbeiten.
Werfen wir einen weiteren Blick auf ein Dokument für einen Benutzer namens Tom.
Benutzer
{
"ID": 1,
"Vorname": "Tom",
"E-Mail": "tom@example.com",
"Mobiltelefon": "765-555-5555",
"Vorlieben": [
"Mode",
"Spas",
"Einkaufen"
],
"Unternehmen": [
{
"Name": "Entertainment 1080",
"Partner": "Jean",
"Status": "Insolvent",
"Gründungsdatum": {
"$date": "2012-05-19T04:00:00Z"
}
},
{
"Name": "Swag for Tweens",
"Gründungsdatum": {
"$date": "2012-11-01T04:00:00Z"
}
}
]
}Alle Informationen über Tom sind in einem einzigen Dokument gespeichert.
Überlegen wir nun, wie wir dieselben Informationen in einer relationalen Datenbank speichern können. Wir beginnen mit der Erstellung einer Tabelle, in der die grundlegenden Informationen über den Benutzer gespeichert werden.
Benutzer
| ID | Vorname | Mobil | |
|---|---|---|---|
| 1 | Tom | tom@example.com | 765-555-5555 |
Ein Benutzer kann Vieles liken (d. h. es besteht eine Eins-zu-Viele-Beziehung zwischen einem Benutzer und „Gefällt mir“). Daher erstellen wir eine neue Tabelle mit dem Namen „Gefällt mir“, um die Likes eines Benutzers zu speichern. Die Tabelle „Likes“ wird einen Fremdschlüssel haben, der auf die Spalte „ID“ in der Tabelle „Benutzer“ verweist.
Gefällt mir
| ID | Benutzer-ID | gefällt |
|---|---|---|
| 10 | 1 | Mode |
| 11 | 1 | Spas |
| 12 | 1 | Einkaufen |
Ebenso kann ein Benutzer mehrere Unternehmen betreiben, daher erstellen wir eine neue Tabelle mit dem Namen „Unternehmen“, um Unternehmensinformationen zu speichern. Die Tabelle „Businesses“ wird einen Fremdschlüssel haben, der auf die Spalte „ID“ in der Tabelle „Users“ verweist.
Unternehmen
| ID | Benutzer-ID | Name | Partner | Status | Gründungsdatum |
|---|---|---|---|---|---|
| 20 | 1 | Unterhaltung 1080 | Jean | Insolvenz | 2011-05-19 |
| 21 | 1 | Swag für Tweens | NULL | NULL | 2012-11-01 |
In diesem einfachen Beispiel sehen wir, dass Daten über einen Benutzer in einem einzigen Dokument in einer Dokumentdatenbank oder in drei Tabellen in einer relationalen Datenbank gespeichert werden könnten. Wenn ein Entwickler Informationen über einen Benutzer in der Dokumentendatenbank abrufen oder aktualisieren möchte, kann er eine Abfrage ohne Joins erstellen. Die Interaktion mit der Datenbank ist einfach, und die Modellierung der Daten in der Datenbank ist intuitiv.
Besuchen Sie Übertragung von Begriffen und Konzepten von SQL auf MongoDB. , wenn Sie dazu mehr erfahren möchten.
Das Dokumentmodell ist eine Obermenge anderer Datenmodelle, darunter Schlüssel-Wert-Paare, relationale Datenmodelle, Objektdatenmodelle, Graphendaten und georäumliche Datenmodelle.
Das Dokumentmodell ist eine Obermenge anderer Datenmodelle
Aufgrund ihrer umfangreichen Datenmodellierungsfähigkeiten sind Dokumentdatenbanken universelle Datenbanken, die Daten für eine Vielzahl von Anwendungsfällen speichern können.
Da Dokumentendatenbanken Entwicklern die Möglichkeit geben, schneller zu arbeiten, haben die meisten relationalen Datenbanken Unterstützung für JSON hinzugefügt. Jedoch bringt das bloße Hinzufügen eines JSON-Datentyps nicht die Vorteile einer Datenbank mit nativer JSON-Unterstützung. Warum? Weil der relationale Ansatz die Produktivität der Entwickler beeinträchtigt, anstatt sie zu verbessern. Die Entwickler müssen sich dabei mir Folgendem herumschlagen:
Das Arbeiten mit Dokumenten erfordert die Verwendung von benutzerdefinierten, anbieterspezifischen SQL-Funktionen, die den meisten Entwicklern nicht vertraut sind und nicht mit Ihren bevorzugten SQL-Tools funktionieren. Beim Hinzufügen von Low-Level-JDBC/ODBC-Treiber und ORMs stehen Entwickler vor komplexen Entwicklungsprozessen, die zu einer geringen Produktivität führen.
Die Darstellung von JSON-Daten als einfache Zeichenketten und Zahlen anstelle der umfangreichen Datentypen, die von nativen Dokumentdatenbanken wie MongoDB unterstützt werden, macht das Berechnen, Vergleichen und Sortieren von Daten komplex und fehleranfällig.
Relationale Datenbanken bieten kaum Möglichkeiten, das Schema von Dokumenten zu validieren, sodass Sie keine Möglichkeit haben, Qualitätskontrollen auf Ihre JSON-Daten anzuwenden. Und Sie müssen weiterhin ein Schema für Ihre regulären Tabellendaten definieren, mit dem gesamten zusätzlichen Overhead, der entsteht, wenn Sie Ihre Tabellen ändern müssen, während sich die Funktionen Ihrer Anwendung weiterentwickeln.
Die meisten relationalen Datenbanken führen keine Statistiken über JSON-Daten, was den Abfrageplaner daran hindert, Abfragen für Dokumente zu optimieren, und Sie daran hindert, Ihre Abfragen anzupassen.
Herkömmliche relationale Datenbanken bieten keine Möglichkeit, die Datenbank auf mehrere Instanzen zu partitionieren (sharden), um sie bei wachsender Arbeitslast zu skalieren. Stattdessen müssen Sie Sharding selbst in der Anwendungsschicht implementieren oder auf kostspielige Scale-up-Systeme zurückgreifen.
Dokumentendatenbanken haben viele Stärken:
Diese Stärken machen Dokumentdatenbanken zu einer ausgezeichneten Wahl für die allgemeine Datenbank.
Eine häufig genannte Schwäche von Dokumentendatenbanken ist, dass viele keine Multi-Dokument-ACID-Transaktionen unterstützen. Wir schätzen, dass aber 80%-90% der Anwendungen, die das Dokumentmodell nutzen, keine Transaktionen mit mehreren Dokumenten benötigen.
Beachten Sie, dass einige Dokumentdatenbanken wie MongoDB Multi-Dokument-ACID-Transaktionen unterstützen.
Besuchen Sie Was sind ACID-Transaktionen? um mehr darüber zu erfahren, wie das Dokumentmodell die Notwendigkeit für Transaktionen mit mehreren Dokumenten größtenteils eliminiert und wie MongoDB Transaktionen in den seltenen Fällen unterstützt, in denen sie erforderlich sind.
Dokumentendatenbanken sind Allzweck-Datenbanken, die eine Vielzahl von Anwendungsfällen sowohl für transaktionale als auch für analytische Anwendungen abdecken:
Besuchen Sie Anwendungsfall-Leitfaden: Wo MongoDB verwendet werden kann, um mehr über jede der oben aufgeführten Anwendungen zu erfahren.
Dokumentendatenbanken verwenden das intuitive und flexible Dokumentendatenmodell, um Daten zu speichern. Dokumentendatenbanken sind Allzweckdatenbanken, die für eine Vielzahl von Anwendungsfällen in verschiedenen Branchen eingesetzt werden können.
Machen Sie erste Schritte mit Dokumentdatenbanken, indem Sie eine Datenbank in MongoDB Atlas, der Entwickler-Datenplattform von MongoDB, erstellen. Atlas bietet eine dauerhaft kostenlose Stufe, mit der Sie großzügig experimentieren und das Dokumentenmodell erkunden können.
MongoDB speichert Daten in BSON (Binär-JSON)-Dokumenten.
Ja, MongoDB hat zwei kostenlose Optionen:
Der offensichtlichste Unterschied zwischen einer Dokumentendatenbank und einer relationalen Datenbank ist die Art und Weise, wie Daten modelliert werden. Dokumentdatenbanken modellieren Daten typischerweise mit flexiblen, JSON-ähnlichen Dokumenten, die Feld-Wert-Paare enthalten. Relationale Datenbanken modellieren Daten eher mithilfe starrer Tabellen mit festen Zeilen und Spalten.