Ein großer Vorteil der MongoDB ist ihre Schemafreiheit. Mit Schemafreiheit ist gemeint, dass eine Datenbank nicht vorher langwierig „modelliert“ werden muss, wie bei einer „normalen“ SQL-Datenbank. Das Anlegen von Tabellen mit Attributen und Typen (Textwerte, Kommazahlen, Ganzzahlen usw.) entfällt bei der MongoDB. Zwar kennt auch die MongoDB Tabellen („collections“), diese werden aber dynamisch per Import eines JSON-Dokuments angelegt. Theoretisch ist es daher möglich in die gleiche Collection JSON-Dokumente von unterschiedlichster Struktur ohne irgendeine Vorbereitung abzulegen. Dies ist etwas, was in einer relationalen (SQL-) Datenbank praktisch unmöglich ist. Hier müsste die Tabelle in die hineingeschrieben werden soll, erst noch vorher erweitert werden.
Die MongoDB ist damit gut geeignet, Daten unterschiedlicher Qualität zu verarbeiten. Ein Anwendungsfall ist zum Beispiel eine Datendrehscheibe, in die Daten von unterschiedlichen voneinander unabhängigen Quellen eingespielt werden, z.B. wenn gleichartige Daten (Fluginformationen, Informationen zu Bus-/Bahnfahrten) von verschiedenen Flugunternehmen bzw. EVUs zusammengeführt werden. Hier ist und kann eine konsistente und einheitliche Bereitstellung von Daten nicht gewährleistet werden, da diese außerhalb des eigenen Einflussbereiches liegen.
Schemafreiheit und Bedienung
Bei einer Schemafreiheit ist die Bedienung der Datenbank nicht ganz trivial. Eine Abfrage läuft z.B. in der MongoDB immer, auch wenn bestimmte Attribute in einer Tabelle komplett fehlen. In einer relationalen Datenbank würden mann hier wegen der Vorgabe der Datenkonsistenz eine Fehlermeldung bekommen. In einer NoSQL ist dieser Anspruch üblicherweise irrelevant. In einer schemalosen Datenbank kennt die Datenbank erst mal keine Attribute, d.h. die Abfrage läuft einfach durch. Es wird aber natürlich kein Wert zurückgeliefert.
Auch wenn NoSQL nicht im Kern “Kein SQL” bedeutet und auch die Sprache SQL nicht grundsätzlich bei NoSQL Datenbanken irrelevant ist, trifft die Aussage zumeist zu. Jede NoSQL und auch die MongoDB basiert auf einer eigenen Sprachsyntax basierend auf JavaScript.
Schemafreiheit und Performanz
Schnelle Abfragen auf einer riesigen Datenmenge ist ein grundsätzlicher Zweck einer NoSQL-Datenbank. Die hohe Performanz kommt vor allem von der Verkleinerung der Grundmenge an abzufragenden Dokumenten durch das Sharding (Verteilung der Abfragemenge auf verteilte Server) aber vor allem durch den Einsatz von Indizes. Es sind bei der Schemafreiheit aber einige Aspekte zu beachten:
- In einem zusammengesetzten Index (Compound-, Key-Index) ist die Reihenfolge wichtig, wie der Compound zusammengesetzt wurde. Z.B. ist eine Abfrage, die auf den letzten Schlüssel eines zusammengesetzten Schlüssels filtert, sehr langsam, da der Index nicht genutzt wird.
- Ein zusammengesetzter Index aus Schlüssel 1, Schlüssel 2 und Schlüssel 3 ist ein anderer als ein zusammengesetzter Index aus Schlüssel 3, Schlüssel 2 und Schlüssel 1.
- Sind in einigen Dokumenten einer Collection bestimmte Schlüssel nicht beinhaltet, dann werden diese von den ndizes ignoriert. Wenn man die aus den SQL-Datenbanken bekannten „IS NULL“ Abfragen durchführt, dann sind diese in der MongoDB sehr langsam, da es keine passenden Indexes gibt.
Zusammenfassung
Die Schemafreiheit der MongoDB ist ein wirklicher Vorteil dieser Datenbank. Einer sehr toleranten Dateneingabe steht eine sehr strikte Regelung bezüglich der Bedienung und der Vorgabe für eine schnelle Abfrage gegenüber. Oder kurz: Erfahrung ist alles. Erfahrungen in SQL-Datenbanken (Oracle, MSSQL, PostgreSQL) helfen bei NoSQL-Datenbanken wie die MongoDB nur bedingt weiter.