Jeffrey Erickson | Senior Writer | 30. Oktober 2024
MongoDB wurde 2007 von ein paar Entwicklern gegründet, die eine riesige Anzahl kleiner Transaktionen im Werbegeschäft verfolgen wollten. Die neue Datenbank, die ursprünglich als 10gen bezeichnet wurde, enthielt Daten in einem einfachen Dokument "Bucket" von JSON-Dateien und konnte sehr schnell vertikal skaliert werden. Sie brauchte keinen großen Teil eines Datenmodells oder einer hohen Nebenläufigkeit von Transaktionen, weil sie nur Anzeigenimpressionen zählte und der Einsatz gering war.
Es stellte sich jedoch heraus, dass MongoDB die Art von Datenbankeinfachheit bereitstellte, nach der Entwickler hungerten. Es wurde im Jahr 2009 unter dem Open-Source-Entwicklungsmodell gestartet, 2018 auf SSPL (Server Side Public License) umgestellt und hat sich zum de facto Standard-Datenspeicher für viele Open-Source-Entwicklungsstacks entwickelt, mit einer Kundenliste, die Expedia, Lyft, eBay und viele mehr enthält. Schauen wir uns einmal an, wie es funktioniert.
MongoDB ist eine beliebte Open-Source-Dokumentdatenbank, die häufig in modernen Web- und mobilen Anwendungen verwendet wird. Sie wird als NoSQL-Datenbank kategorisiert, was bedeutet, dass sie einen flexiblen, dokumentorientierten Ansatz zum Speichern von Daten anstelle einer herkömmlichen tabellenbasierten relationalen Methode verfolgt. Ein großer Teil der Attraktivität von MongoDB ist die Einfachheit und der Fokus der Entwickler. Beispiel: Mongo-Interaktionen werden durch das Akronym CRUD definiert, zum Erstellen, Lesen, Aktualisieren und Löschen.
MongoDB speichert Daten in JSON-Dokumenten, die es relativ einfach machen, gespeicherte Daten – ob strukturiert, unstrukturiert oder semistrukturiert – für verschiedene Arten von Anwendungen zu verwenden. Das flexible Datenmodell von MongoDB ermöglicht es Entwicklern, unstrukturierte Daten zu speichern und bietet gleichzeitig Indexierungsunterstützung für schnelleren Dateizugriff und Replikation für Datenschutz und Verfügbarkeit. Das bedeutet, dass Entwickler anspruchsvolle Anwendungen mit MongoDB entwerfen und erstellen können.
Während MongoDB entwickelt wurde, um Impressionen über Tausende von Ad-Serving-Websites zu verfolgen, gewann es bald große Popularität als flexibler Datenspeicher in der Open-Source-Web-Entwicklung. Es wurde seit seiner Einführung im Jahr 2007 kontinuierlich weiterentwickelt und sammelt ein robustes Featureset, das Ad-hoc-Abfragen, Indexierung und Echtzeitaggregation umfasst. Ein wesentlicher Vorteil von MongoDB für Entwickler ist, dass es im Vergleich zu den meisten gängigen relationalen Datenbanken intuitiv zu bedienen und schnell zu beginnen ist. Der Typ der in MongoDB gespeicherten JSON-Dokumente wird bekannten Datentypen in gängigen Programmiersprachen zugeordnet, wie JavaScript- oder Python-Wörterbüchern. Mongo bietet auch ein umfassendes Menü mit Client-Librarys mit Treiberunterstützung für die meisten Programmiersprachen, darunter PHP, .Net, Java, Python, Node.js und viele andere.
Wie alle technischen Tools ist MongoDB in einigen Bereichen stark und in anderen schwach. Es wurde entwickelt, um Online-Werbung zu verfolgen, die einen schnellen gleichzeitigen Zugriff erforderte, aber nur lose Transaktionsgenauigkeit und wenig Echtzeitanalyse benötigte. Auch heute noch basiert MongoDB auf BASE-Prinzipien, die für Verfügbarkeit, Skalierbarkeit und eventuelle Konsistenz stehen. Daher wird MongoDB in der Regel in Szenarien verwendet, in denen High Availability und Skalierbarkeit primäre Designüberlegungen sind. Im Gegensatz dazu entscheiden sich Entwickler für Jobs wie Finanzvorgänge oder in geschäftskritischen Unternehmensumgebungen im Allgemeinen für eine relationale Datenbank. Diese bieten ACID-Transaktionen (Atomizität, Konsistenz, Isolation und Dauerhaftigkeit), um die Zuverlässigkeit und Konsistenz von Datenbankvorgängen sicherzustellen. In jüngerer Zeit bietet die Technologiebranche jedoch Lösungen, die Entwicklern das Beste aus beiden Welten über die Einfachheit der Entwicklung von JSON und die Vorteile von SQL bieten können.
Wie werden Daten von Anwendungen in die Datenbank MongoDB übertragen?
MongoDB umfasst eine Reihe von Konfigurationen und Service-Levels, die den Anforderungen von Entwicklern entsprechen, die an kleinen, mittelständischen und sogar großen Unternehmensprojekten arbeiten.
Wichtige Erkenntnisse
MongoDB ist eine NoSQL-Datenbank, die ein dokumentorientiertes Datenmodell verwendet, bei dem jeder Datensatz ein Dokument ist, das in einer Sammlung gespeichert ist, und nicht die Zeilen und Spalten, die gängigen relationalen Datenbanken wie MySQL gemeinsam sind.
MongoDB speichert die JSON-Dokumente mit einem Format namens BSON oder binärem JSON. Die nicht relationale Natur dieser Dokumente bedeutet, dass sie strukturierte Anwendungsdaten sowie semistrukturierte und unstrukturierte Daten speichern können – und die Datenbank kann diese verarbeiten. Im Gegensatz zu relationalen Datenbanken verwendet MongoDB keine starren Schemas. Stattdessen sind die Dokumente flexibel und können Arrays und verschachtelte Dokumente enthalten, was eine komplexe und hierarchische Datenspeicherung ermöglicht.
Bei der Verarbeitung extrem großer Datasets dokumentieren Sie Datenbanken wie MongoDB, skalieren oder verteilen Daten mithilfe einer Technik namens Sharding auf mehrere Knoten oder Cluster. Dieses Modell ermöglicht eine schnelle Speicherung und Rückruf. Diese Architektur ist sinnvoll, da MongoDB für die Anzeigenschaltung erstellt wurde, wo möglicherweise Millionen von Anzeigen jederzeit über Tausende von Websites aufgerufen werden müssen. Es gab keine inhärente Notwendigkeit, eine Anzeige gegen eine andere zu analysieren, wodurch Daten physisch verteilt und getrennt werden konnten.
Hierarchische Dokumentdatenbanken sind für Lesevorgänge sehr schnell, aber die Datenanalyse kann langsam sein, da Systeme Daten in allen verschachtelten Entitys analysieren müssen. Relationale Datenbanken hingegen speichern ihre Daten in separaten Tabellen, und ein einzelnes "Objekt" kann in vielen Tabellen innerhalb der Datenbank referenziert werden, was effizientere Analysevorgänge in großem Maßstab ermöglicht. Angesichts dieser unterschiedlichen Stärken entscheiden sich Entwicklungsteams im Allgemeinen für das beste Datenmanagementsystem für die aktuellen Anforderungen ihrer Anwendung. Oder sie wählen eine multimodale Datenbank, die vollständigen SQL-Zugriff auf relationale und JSON-Dokumentdaten sowie auf viele andere Datentypen bietet.
ACID vs. BASE
Welche Sie wählen, hängt von den Anforderungen Ihrer Anwendung ab.
| ACID (Atomizität, Konsistenz, Isolation, Haltbarkeit) | BASE (im Wesentlichen verfügbar, Soft State, eventuell konsistent) |
|---|---|
|
Atomizität: Stellt sicher, dass eine gesamte Transaktion als eine Einheit behandelt wird. Entweder sind alle Änderungen erfolgreich, oder keiner von ihnen. Dadurch werden teilweise Aktualisierungen verhindert, bei denen Ihre Daten in einem inkonsistenten Zustand bleiben könnten. Konsistenz: Garantiert, dass die Datenbank nach einer Transaktion von einem gültigen Status in einen anderen übergeht. Erzwingt Geschäftsregeln und Datenintegrität. Isolierung: Stellt sicher, dass sich nebenläufige Transaktionen nicht gegenseitig stören. Jede Transaktion scheint isoliert ausgeführt zu werden, auch wenn mehrere Transaktionen gleichzeitig stattfinden. Dauerhaftigkeit: Nachdem eine Transaktion festgeschrieben wurde, werden die Änderungen in den permanenten Speicher geschrieben und sind nicht von Systemfehlern wie Abstürzen betroffen. |
Im Wesentlichen verfügbar: Konzentriert sich auf die Maximierung der Datenverfügbarkeit. Das System ist bestrebt, auch bei Teilausfällen betriebsbereit zu bleiben, sodass die meisten Lese- und Schreibvorgänge fortgesetzt werden können. Soft-Status: Die Datenkonsistenz wird nach einem Schreibvorgang nicht sofort garantiert. Es kann zu einer leichten Verzögerung kommen, bevor Änderungen in allen Replikaten widergespiegelt werden, was zu vorübergehenden Inkonsistenzen führt. Letztendlich konsistent: Im Laufe der Zeit wird Konsistenz über Hintergrundprozesse erreicht, die Änderungen über Replikate hinweg synchronisieren. |
|
Vorteile: Hohe Datenintegrität und starke Konsistenz machen ACID ideal für Anwendungen, die Genauigkeit erfordern, wie z. B. Finanztransaktionen. |
Vorteile: Hohe Verfügbarkeit und Skalierbarkeit machen BASE ideal für Anwendungen, die eine hohe Verfügbarkeit und Reaktionsfähigkeit erfordern, insbesondere in verteilten Systemen. Entspannte Konsistenzanforderungen ermöglichen schnellere Schreibgeschwindigkeiten und bessere Skalierbarkeit. |
|
Nachteile: Performance-Overhead bedeutet, dass die Aufrechterhaltung von ACID-Garantien zu langsameren Schreibgeschwindigkeiten führen kann. Strenge Konsistenzanforderungen können in hoch skalierbaren Umgebungen eine Herausforderung darstellen. |
Nachteile: Temporäre Inkonsistenzen können während der Datensynchronisierung auftreten, wodurch BASE für Anwendungen, bei denen eine strenge Datenintegrität und unmittelbare Konsistenz wichtig sind, weniger geeignet ist. |
MongoDB speichert Daten in Collections, die analog zu Tabellen in relationalen Datenbanken sind. Jede Sammlung enthält mehrere Dokumente, die in ihrer Struktur variieren können. Die Struktur von Dokumenten muss nicht im System deklariert werden, da Dokumente selbstbeschreibend sind. Das bedeutet, dass jedes Dokument Metadaten enthält, die jedes Feld im Dokument beschreiben.
Um die Performance zu verbessern, unterstützt MongoDB die Indexierung für jedes Feld in einem Dokument. Indizes unterstützen die effiziente Ausführung von Abfragen und können primäre und sekundäre Indizes enthalten. Die Abfragesprache von MongoDB unterstützt CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren, Löschen) und ermöglicht komplexe Aggregationen, Textsuche und Geodatenabfragen. Um die Antwortzeiten zu verbessern, stellt MongoDB ein Aggregations-Framework bereit, mit dem Entwickler komplexe Datenverarbeitung auf Serverseite einrichten können. Das bedeutet, dass es in der Lage ist, Analysen im Cluster durchzuführen, in dem sich die Daten befinden, ohne sie auf eine andere Plattform verschieben zu müssen, wie bei Apache Spark oder Hadoop. Dies kann die Datenmenge reduzieren, die an und von Kunden übertragen wird.
Mit MongoDB können Sie High Availability bereitstellen und die Performance verbessern, indem Sie Replikat-Datasets unterstützen. Replikate können für das Load Balancing verwendet werden, indem Lese- und Schreibvorgänge auf alle Instanzen verteilt werden. Diese Replikatsets bieten auch Redundanz und erhöhen die Datenverfügbarkeit über mehrere Kopien von Daten auf verschiedenen Datenbankservern. Im Falle eines Hardwareausfalls oder einer Wartung ermöglichen Replikatsets MongoDB das automatische Failover und die Datenredundanz.
Aus Gründen der Skalierbarkeit unterstützt MongoDB horizontale Skalierung durch Sharding. Dies ist eine Möglichkeit, Daten über mehrere Datenbanken auf mehreren Computern zu verteilen. Ein in Shards unterteiltes Cluster kann aus vielen Replikatsets bestehen. Sharding wird konfiguriert, indem ein Shard-Schlüssel definiert wird, der bestimmt, wie die Daten über die Shards verteilt werden. Mit dieser Technik können Sie große Datasets und Vorgänge mit hohem Durchsatz verwalten, indem Sie das Dataset aufteilen und mehrere Server laden.
Wie Sharding funktioniert
Jedes Shard ist eine unabhängige Datenbankinstanz, die Teilmengen der Daten einer in Shards unterteilten Datenbank hostet.
Jeder Datenbanktyp (relational, z.B. MySQL, Postgres und Oracle Database) oder dokumentorientiert (z.B. CouchDB, DynamoDB und MongoDB) weist Stärken und Schwächen auf, und die Wahl zwischen diesen hängt im Allgemeinen von den spezifischen Anforderungen und Einschränkungen der zu entwickelnden Anwendung ab.
Ein relationales Datenbankmanagementsystem (RDBMS) verwendet eine Structured Query Language (SQL), während das dokumentorientierte Format von MongoDB Document Store-APIs verwendet. Trotzdem verwendet MongoDB Query Language (MQL) eine JavaScript-ähnliche Sprache mit Vorgängen wie dem Erstellen, Lesen, Aktualisieren und Löschen von Dokumenten.
MongoDB hat kein Konzept von Tabellen und Zeilen und enthält keine Schemas. Daher muss weniger Struktur definiert werden, bevor die Datenbank verwendet werden kann. Ohne zentrales Schema muss jedoch jede App, die auf die Sammlungen zugreift, das Dokument verstehen. Das "Schema" ist also im Anwendungscode und nicht in der Datenbank definiert. Wenn eine App das Schema ändert, können andere Apps beschädigt werden. Im Vergleich zu relationalen Datenbanken, bei denen ein Schema im Wesentlichen ein Blueprint für das RDBMS ist und die Datenorganisation und -beziehung explizit definiert sind, fehlt MongoDB das inhärente Konzept der Beziehungen zwischen Daten.
Die Flexibilität von Datenspeichern ist bemerkenswert, da MongoDB verschiedene Formate für Daten wie Schlüsselwertspeicher, Diagramme und Dokumente verwendet und sich Datenstrukturen im Laufe der Zeit ändern können. Dies unterscheidet sich von einem RDBMS, das strenge Definitionen, Hierarchien und Validierungsprozeduren verwendet, die auf diesen basieren, um die Datenintegrität sicherzustellen.
Während das Einrichten einer einfachen MongoDB-Instanz unkompliziert ist, kann die Konfiguration und Verwaltung eines groß angelegten, verteilten MongoDB-Clusters mit Sharding und Replikaten komplex sein und ein gutes Verständnis der Architektur- und Konfigurationsoptionen erfordern.
| Relational | MongoDB | |
|---|---|---|
| Datenmodell | Verwendet Tabellen mit festen Zeilen und Spalten, und Daten werden in einem vordefinierten Schema strukturiert. | Verwendet Sammlungen von Dokumenten, die JSON-ähnliche Strukturen mit dynamischen Schemas sind. |
| Schemaflexibilität | Erfordert ein vordefiniertes Schema, das eingerichtet werden muss, bevor Daten hinzugefügt werden können. | Hat ein dynamisches Schema. Neue Felder können einem Dokument hinzugefügt werden, ohne dass sich dies auf alle anderen Dokumente in der Sammlung auswirkt. |
| Abfragesprache | Verwendet SQL, das für komplexe Abfragen sehr leistungsfähig ist, um Daten zu definieren und zu bearbeiten. | Verwendet eine dokumentbasierte Abfragesprache, die als intuitiver, aber weniger vollständig und vielseitiger als SQL angesehen wird. |
| Skalierung | Herkömmlicherweise vertikal skaliert, wodurch die vorhandene Maschine um mehr Leistung erweitert wird, obwohl ausgereifte Features wie Sharding und Oracle Real Application Clusters Unterstützung für horizontale Skalierung bieten. | Entwickelt, um mithilfe von Sharding horizontal über mehrere Maschinen hinweg zu skalieren, wodurch Daten über ein Maschinencluster verteilt werden. |
| Transaktionen | Unterstützt mehrreihige Transaktionen und ist ACID-konform und eignet sich daher für Anwendungen, bei denen keine Daten verloren gehen oder beschädigt werden können. | Unterstützt Multidokument-Transaktionen, ist jedoch bekanntermaßen weniger robust als die meisten herkömmlichen relationalen Datenbanken, insbesondere über verteilte Daten. |
| Leistung | Entwickelt, um genaue Transaktionen sicherzustellen, aber die Leistung kann bei großen Datenmengen geringer sein. Die analytische Performance ist jedoch generell besser. | Für hohe Leseleistung über große Datenmengen hinweg entwickelt. |
MongoDB eignet sich für eine Vielzahl von Anwendungen, von einfachen CRUD-Anwendungen wie Blogging- oder Notiz-Apps bis hin zu komplexen Plattformen wie Amazon Prime. MongoDB wird häufig für Content-Management-Systeme (CMSes), Gaming-Apps, bei denen die Datensynchronisierung schnell sein muss, und biometrische Gesundheitsdaten ausgewählt, unter anderem für viele andere Anwendungsfälle. Seine Vielseitigkeit hat es zu einem Eckpfeiler beliebter Open-Source-Entwicklungsstacks wie MEAN und MERN gemacht.
Wählen Sie es, wenn Sie Folgendes brauchen:
MongoDB ist bei Entwicklern zum Teil aufgrund seiner intuitiven API, des flexiblen Datenmodells und der folgenden Funktionen beliebt geworden:
MongoDBs Popularität bei der Open-Source-Community ist auf die vielen Möglichkeiten zurückzuführen, wie es die Anwendungsentwicklung und -wartung intuitiver und skalierbarer macht. Zu diesen Vorteilen gehören:
Während MongoDB viele Vorteile bietet, insbesondere für Anwendungen, die Flexibilität und hohe Performance bei großen Datenmengen erfordern, weist es viele potenzielle Nachteile auf.
MongoDB ist eine NoSQL-Datenbank, die gut in diesem Ökosystem funktioniert. Sie wurde jedoch auch für die Interaktion mit anderen Typen von Datenbankmanagementsystemen über verschiedene Datenintegrationstools und Connectors entwickelt. Dieses Toolset umfasst eine ETL-Infrastruktur (Extrahieren, Transformieren, Laden) zum Extrahieren und Migrieren von Daten aus MongoDB und umgekehrt. Dies ist nützlich, um Daten für Berichte und komplexe Datenanalysen an eine relationale Datenbank zu senden. MongoDB-Anwendungen können auch über verschiedene Datenbankplattformen hinweg mit REST-APIs kommunizieren.
Ein gutes Beispiel für die MongoDB-Kompatibilität ist die Oracle Database-API für MongoDB, mit der Entwickler die Open-Source-Tools und -Treiber von MongoDB verwenden können, die mit einer Oracle Autonomous JSON Database verbunden sind. Dadurch erhalten sie Zugriff auf die Multimodel-Funktionen von Oracle und können Daten für Analysen, maschinelles Lernen (ML) und räumliche Analysen nicht in eine separate Datenbank verschieben. Stellen Sie sich Autonomous JSON Database als multimodale Alternative zu MongoDB Atlas vor. Häufig sind nur wenige oder keine Änderungen für vorhandene Anwendungen erforderlich.
Anstatt über APIs auf die MongoDB-Funktionalität zuzugreifen, können Entwickler einfach ihre JSON-zentrierten Workloads in eine Oracle Autonomous JSON Database auf Oracle Cloud Infrastructure (OCI) migrieren. Dadurch wird ein Cloud-Dokumentendatenbankservice für JSON-zentrierte Anwendungen bereitgestellt, der Dokument-APIs im NoSQL-Stil (Simple Oracle Document Access oder SODA und Oracle Database API for MongoDB), serverlose Skalierung, leistungsstarke ACID-Transaktionen, umfassende Sicherheit und niedrige Pay-per-Use-Preise enthält. Es gibt keine Ausfallzeiten, da die Migration von MongoDB zu Oracle Autonomous JSON Database mit Oracle Cloud Infrastructure (OCI) GoldenGate erfolgt.
MongoDB-Benutzer können jetzt vielseitigere JSON-zentrierte Anwendungen erstellen. Mit Oracle Autonomous Database können Entwickler flexibel auf Geschäftsanforderungen mit einer einzigen Datenplattform reagieren, die alle ihre Anforderungen erfüllen kann. So können Entwickler SQL, JSON-Dokumente, Diagramme, Geodaten, Text und Vektoren in einer einzigen Datenbank verwenden, um schnell neue Features zu erstellen.
Darüber hinaus bietet ein revolutionäres neues Feature in Oracle Database, JSON Relational Duality, die Vorteile von relationalen Tabellen und JSON-Dokumenten, ohne die Kompromisse beider Modelle.
Autonomous Database bietet integrierte KI-Services und datenbankinternes maschinelles Lernen (ML), um Anwendungen mit Text- und Bildanalysen, Spracherkennung oder personalisierten Empfehlungen zur Verbesserung zu bringen. Darüber hinaus übersetzt Autonomous Database Select AI automatisch natürliche Sprache in Datenbankabfragen und ermöglicht Ihnen eine kontextbezogene Konversation mit der Datenbank, ohne benutzerdefinierte Codierung oder manuelle Eingriffe über eine komplexe Schnittstelle. Da die Datenbank vollständig autonom ist, können Entwicklungsteams sich auf die Erstellung von Anwendungen konzentrieren, indem sie die Verfügbarkeit sicherstellen und Daten durch automatisierte Sicherheitsmaßnahmen und kontinuierliche Überwachung schützen.
Sie können heute kostenlos loslegen und sogar einen Workshop ausprobieren, um zu erfahren, wie Sie SQL, JSON und Oracle Graph in derselben App verwenden.
Mit Anwendungsfällen, die E-Commerce-Plattformen, IoT-Anwendungen und mehr umfassen, hat MongoDB seine branchenübergreifende Vielseitigkeit unter Beweis gestellt. Die Fähigkeit, verschiedene Datentypen zu verarbeiten und komplexe Abfragen zu unterstützen, positioniert sie als eine fähige Komponente moderner Technologie-Stacks. Da Unternehmen versuchen, den maximalen Nutzen aus ihren Daten zu ziehen, wird MongoDB entscheidend für den Erfolg sein.
Entwickler und ihre Geschäftskollegen können gleichermaßen von Cloud-nativen Anwendungen profitieren, die speziell darauf ausgelegt sind, Agilität, Skalierbarkeit und Effizienz zu maximieren. Erfahren Sie mehr und sehen Sie sich 10 zusätzliche Möglichkeiten an, wie die Cloud besser wird.
Was ist der Unterschied zwischen SQL und MongoDB?
MongoDB speichert unstrukturierte Daten, die für eine SQL (Structured Query Language) ungeeignet sind.
Ist MongoDB eine Back-End-Sprache?
Nein, aber es kann als Teil einer Backend-Webanwendung verwendet werden.
Ist MongoDB eine Sprache oder ein Framework?
Es handelt sich um ein Datenbankmanagementsystem, das unstrukturierte Daten verwendet, die in Dokumenten statt in Tabellen gespeichert sind.