Re­la­tio­na­le Da­ten­ban­ken waren jahr­zehn­te­lang die be­vor­zug­te Lösung zur Ver­wal­tung von Daten. Doch die Vielfalt an Daten, die moderne Web­an­wen­dun­gen ausmachen, haben Da­ten­ban­ken mit do­ku­men­ten­ori­en­tier­tem Ansatz wie MongoDB zu ernst­haf­ten Kon­kur­ren­ten des tra­di­tio­nel­len Modells gemacht. Wir erklären, wie dieser neue Ansatz funk­tio­niert, und welche Vorteile er bietet.

Was macht MongoDB aus?

MongoDB, ab­ge­lei­tet aus dem Eng­li­schen „humongous“ (Deutsch: gi­gan­tisch, riesig), ist ein do­ku­men­ten­ori­en­tier­tes Da­ten­bank­sys­tem. Im Gegensatz zu re­la­tio­na­len Da­ten­ban­ken, wo Daten in einer struk­tu­rier­ten Tabelle ge­spei­chert werden, werden Daten in MongoDB-Da­ten­ban­ken in so­ge­nann­ten un­struk­tu­rier­ten Sam­mel­map­pen (Coll­ec­tions) ge­spei­chert.

Zudem ver­zich­tet MongoDB auf SQL als An­fra­ge­spra­che, und wird somit als NoSQL-Da­ten­bank­sys­tem ge­kenn­zeich­net. Statt­des­sen nutzt MongoDB die auf Ja­va­Script ba­sie­ren­de MongoDB Query Language (MQL) als An­fra­ge­spra­che. Dem­entspre­chend werden MongoDB-Da­ten­sät­ze im BSON-Format ge­spei­chert, das dem JSON-Format nach­emp­fun­den ist. Dank dieser Tatsache werden sämtliche Ja­va­Script-Da­ten­ty­pen un­ter­stützt, weshalb MongoDB die optimale Wahl für viele Ja­va­Script-basierten Platt­for­men ist.

Eine weitere Ei­gen­schaft von MongoDB-Da­ten­ban­ken ist ihre ho­ri­zon­ta­le Ska­lier­bar­keit. Das heißt, dass die Daten einer Datenbank über mehrere Server verteilt sein können, anstatt an einer zentralen Stelle ge­spei­chert zu werden. So kann man die Ver­füg­bar­keit der Daten und die gesamte Per­for­mance der Datenbank ver­bes­sern. Diese Art von Ska­lie­rung ist meistens kos­ten­güns­ti­ger als einen einzelnen Server mit per­for­man­te­rer Hardware aus­zu­stat­ten (vertikale Ska­lie­rung).

Wie funk­tio­niert MongoDB?

MongoDB arbeitet, anders als MySQL, do­ku­men­ten­ori­en­tiert und verfolgt ent­spre­chend einen komplett anderen Ansatz bei der Spei­che­rung der Daten. Anstatt die Daten ta­bel­la­risch zu speichern, wo jede Zeile dieselbe Anzahl an Felder hat, die mit Werten befüllt werden müssen, werden Daten un­struk­tu­riert in BSON-Dokumente ge­spei­chert. Jedes Dokument darf beliebig viele Felder haben, die auch nicht mit­ein­an­der über­ein­stim­men müssen. Die Dokumente ersetzen somit praktisch die Zeilen in einer SQL-Tabelle, und die in diesen Do­ku­men­ten de­fi­nier­te Felder die Spalten.

Es gibt mehrere Tools, mit denen man an MongoDB-Da­ten­ban­ken arbeiten kann. Neben der ver­trau­ten MongoDB Shell gibt es auch MongoDB Compass, ein gra­fi­sches Tool zur Ver­wal­tung von MongoDB-Da­ten­ban­ken. Wir werden uns aber auf Shell-Befehle kon­zen­trie­ren.

Da die MQL auf Ja­va­Script basiert, gibt es schon eine ganze Reihe von vor­ge­fer­tig­ten Funk­tio­nen, die komplexe Anfragen und Befehle er­mög­li­chen. Aber grund­sätz­lich haben alle Schreib- und Le­se­be­feh­le denselben Aufbau, der im folgenden Beispiel zu sehen ist. Über diesen Befehlen hinaus gibt es zahl­rei­che weitere Befehle, mit denen man seine MongoDB-Datenbank verwalten kann. Diese werden in der MongoDB-Do­ku­men­ta­ti­on aus­führ­lich be­schrie­ben und erklärt.

db.studierende.find({ Name: "Fritz" })
db.studierende.updateOne({ Name: "Fritz" }, { $set: { Semester: 2 } })
db.studierende.deleteOne({ Name: "Peter" })
db.studierende.insertOne({
    Name: "Else",
    Alter: 18,
    Semester: 1
})

Im obigen Beispiel sind mehrere auf­ein­an­der­fol­gen­de Befehle an einer MongoDB-Datenbank zu sehen, wovon jeder gleich aufgebaut ist. „db“ steht für die gesamte Datenbank, und „stu­die­ren­de“ für die Sam­mel­map­pe, in der die jeweilige Operation vor­ge­nom­men werden soll. Darauf folgt die Methode, die angewandt werden soll.

Die find()-Methode kann man nutzen, um nach einem be­stimm­ten Dokument zu suchen. Lässt man das Pa­ra­me­ter­feld leer, werden alle Dokumente in dieser Sam­mel­map­pe zu­rück­ge­ge­ben. Im obigen Beispiel wird aber nach allen Do­ku­men­ten gesucht, wo das Feld „Name“ den Wert „Fritz“ hat. Die updateOne()-Methode kann man nutzen, um Werte in einem Dokument zu über­schrei­ben. Bei der updateOne()-Methode werden zwei Argumente übergeben. Das erste ist das so­ge­nann­te Aus­wahl­kri­te­ri­um, und das zweite ist das Schlüssel-Wert-Paar, das über­schrie­ben werden soll. In diesem Fall wird das Feld „Semester“ bei allen Stu­die­ren­den, die „Fritz“ heißen, mit einer 2 befüllt.

Die deleteOne()-Methode bekommt nur ein einzelnes Argument, nämlich das Aus­wahl­kri­te­ri­um, wonach Dokumente entfernt werden sollen. In dem Beispiel werden alle Stu­die­ren­den, die „Peter“ heißen, aus der Datenbank entfernt. Die insertOne()-Methode bekommt ebenso ein Argument, diesmal aber den kom­plet­ten JSON-Inhalt des ein­zu­fü­gen­den Dokuments. Beim Einfügen von Do­ku­men­ten ist zu beachten, dass jedes Dokument in einer MongoDB-Sam­mel­map­pe eine ein­deu­ti­ge 12-Byte He­xa­de­zi­mal­zahl als Objekt-ID haben muss. Falls dieser Parameter beim Einfügen des Dokuments nicht angegeben wird, generiert MongoDB au­to­ma­tisch eine ID.

Vorteile von MongoDB

Der Aufbau von MongoDB hat für Nut­ze­rin­nen und Nutzer einige Vorteile, vor allem im Bereich der Fle­xi­bi­li­tät und Ska­lier­bar­keit. Zum einen bietet die do­ku­men­ten­ba­sier­te Spei­che­rung von Daten den Vorteil, dass nicht alle Einträge dieselben Attribute haben müssen, wie bei re­la­tio­na­len Da­ten­ban­ken. Dies erlaubt die Spei­che­rung von un­struk­tu­rier­ten und se­mi­struk­tu­rier­ten Daten. Zudem können in­di­vi­du­el­le Dokumente um­struk­tu­riert werden (z. B. indem man ein Attribut/Feld hinzufügt oder löscht), ohne dass andere Dokumente in der selben Sam­mel­map­pe auch um­struk­tu­riert werden müssen. Da die Dokumente im BSON-Format ge­spei­chert sind, erhält man den zu­sätz­li­chen Vorteil, dass MongoDB-Da­ten­ban­ken einen hohen Grad an Kom­pa­ti­bi­li­tät mit vielen gängigen Ja­va­Script-Platt­for­men bieten.

Zu­sätz­lich zur Spei­che­rung von un­struk­tu­rier­ten Daten bietet MongoDB auch einen hohen Grad an ho­ri­zon­ta­ler Ska­lier­bar­keit, ohne die Prin­zi­pi­en des ACID-Modells (Atomicity, Con­sis­ten­cy, Isolation, Du­ra­bi­li­ty) zu verletzen. Bei ver­teil­ten Da­ten­ban­ken ist es oft schwer, Kon­sis­tenz zu ga­ran­tie­ren, da nicht alle Daten auf demselben Server ge­spei­chert sind. Wenn Än­de­run­gen an mehreren Do­ku­men­ten gleich­zei­tig vor­ge­nom­men werden, können diese Än­de­run­gen nicht sofort von allen be­tei­lig­ten Servern über­nom­men werden. Bei einem hohen An­fra­gen­vo­lu­men kann das manchmal zu in­kon­sis­ten­ten Daten führen. Doch seit der Ver­öf­fent­li­chung von MongoDB 4.2 in 2019 lassen sich Än­de­run­gen an mehreren Do­ku­men­ten auf un­ter­schied­li­chen Servern vornehmen, ohne Kon­sis­tenz oder Ver­füg­bar­keit zu opfern.

Tipp

Sie brauchen eine do­ku­men­ten­ba­sier­te Datenbank, die mit den An­for­de­run­gen Ihrer Web­an­wen­dung wächst? Dann ist MongoDB die perfekte Lösung für Sie!

Für welche Ein­satz­ge­bie­te ist MongoDB geeignet?

MongoDB ist immer dann eine ex­zel­len­te Wahl, wenn Sie Web­pro­jek­te umsetzen wollen, die auf sehr großen, un­struk­tu­rier­ten Da­ten­men­gen basieren. Das do­ku­men­ten­ba­sier­te Arbeiten, ohne an ein Schema gebunden zu sein, ist prä­de­sti­niert für viele un­ter­schied­li­che Da­ten­ty­pen, die ge­spei­chert und schnell ver­ar­bei­tet werden müssen.

Das Da­ten­bank­sys­tem er­mög­licht außerdem die ho­ri­zon­ta­le, nahezu un­be­grenz­te Ska­lie­rung, da die Da­ten­ban­ken pro­blem­los auf mehrere Server verteilt werden können, ohne die Funk­ti­ons­fä­hig­keit zu be­ein­träch­ti­gen. Um Si­cher­heit und Ver­füg­bar­keit der Daten lang­fris­tig zu ge­währ­leis­ten, können mit MongoDB außerdem un­kom­pli­ziert Kopien des Da­ten­be­stands erstellt und auf ver­schie­de­nen Servern zur Verfügung gestellt werden. Auch bei der Zu­sam­men­fas­sung von Da­ten­men­gen aus einer oder mehreren Quellen spielt die do­ku­men­ten­ori­en­tier­te Datenbank ihre Stärken aus.

Der Einsatz von MongoDB ist dem­entspre­chend für alle Web­pro­jek­te zu empfehlen, die sich durch folgende Ei­gen­schaf­ten aus­zeich­nen:

  • Ska­lier­bar­keit: Wächst Ihr Web­pro­jekt, steigt in der Regel die Zahl der Anfragen, was ent­spre­chend höhere An­for­de­run­gen an die Datenbank stellt.
  • Ver­füg­bar­keit: Sie sind darauf an­ge­wie­sen, dass Ihre Web­an­wen­dung dauerhaft verfügbar ist, selbst im Falle eines Ser­ver­aus­falls.
  • Fle­xi­bi­li­tät: Ihr Projekt soll jederzeit dynamisch angepasst werden können.

Sie wissen nicht, welches Da­ten­bank­mo­dell das passende für Ihr Web­pro­jekt ist? Sie müssen sich nicht ent­schei­den: Auch eine Kom­bi­na­ti­on ver­schie­de­ner Typen ist möglich – und kann durchaus die perfekte Lösung für Ihr An­for­de­rungs­pro­fil dar­stel­len.

Tipp

Sie haben sich für MongoDB ent­schie­den und wollen anfangen, Ihre Datenbank auf­zu­set­zen? Unser Artikel zur In­stal­la­ti­on von MongoDB hilf Ihnen, ein­zu­stei­gen.

Zum Hauptmenü