MongoDB eure Erfahrungen

N8wolf

fühlt sich gemobbt
Registriert
14 Juli 2013
Beiträge
99
Guten Tag,

Ich arbeite mich gerade etwas in die MongoDB ein um festzustellen, ob ich dies meinen Studenten antun kann für ein Projekt (Bachelorarbeiten etc.).

Also ich muss sagen, um wie mehr ich mir einarbeite, desto intuitiver und besser gefällt mir das Konzept der noSQL gegnüber der Relationalen Datenbanksysteme.

Der einzige Nachteil, den ich nun bis jetzt wirklich gefunden habe ist der erhöhte Speicherbedarf der Datenbank und das Umstellen der Gedankenprozesse wenn man sich ein "Schema" überlegt.

Ich muss aber auch gestehen das ich noch am Anfang meiner Spielerein stehe und gerade am map reduce bastel.

Mich würden nun einfach einmal eure Erfahrungen zur MongoDB (oder vergleichbar interessieren)

Habt ihr damit schon ein Projekt verwirklicht?
Seid ihr gut damit klar gekommen oder hattet ihr starke Einstiegsprobleme?
Was haltet ihr von dem Konzept von Dokumentbassierten Datenbanken?
usw.

Mit freundlichen Grüßen
 
Ich würde keine generelle Aussage darüber treffen wollen, ob relationale oder (im Fall von MongoDB) dokumentbasierte Datenbanken vorzuziehen seien. Das hängt vom konkreten Anwendungsfall ab. Eine relationale Datenbank ist z.B. klar vorzuziehen, wenn viele unterschiedliche Relationen zwischen den Daten modelliert werden müssen, inklusive 1:1, 1:n- und n:m-Beziehungen. Bei dokumentbasierten Modellen führt dies sehr leicht dazu, dass Daten nicht-normalisiert und daher zumindest teilweise redundant gespeichert werden müssen, was bei grossen Datenbeständen zum Problem wird. Ein meines Erachtens guter Artikel dazu ist .

Um ein Beispiel zu nennen: Um in einem Board zu jedem Beitrag den Benutzer anzuzeigen, der ihn erstellt hat, müssten in einem dokumentbasierten System entweder die Benutzerdaten (Benutzername, Benutzertitel, ...) für jeden Beitrag kopiert werden, oder sie müssten für jeden Beitrag in einem separaten Query abgefragt werden. Beides wird bei grossen Datenbeständen zum Problem.
 
Jein, das mit der Redundanz stimmt nur beschränkt. Die meisten Wrapper für die noSQL-Datenbanken erlauben auch wieder Referenzen direkt mit aus zu lesen was auch relativ schnell geht. Problematisch ist dabei eher, das praktisch keine JOINs bei Abfragen möglich sind, sprich nur innerhalb eines einzelnen Objekts gefiltert werden kann und nicht über eine Relation hinweg.

Allgemein muss man sich allerdings die Frage stellen, wie die Datenbank hauptsächlich genutzt wird.

Würde man auch in der relationalen Datenbank Datensätze IMMER nur direkt mit dem Pkey suchen und davon ausgehend über Referenzen, so ist eine noSQL-DB eigentlich perfekt geeignet, um so mehr je komplexer die zu speichernden, jedoch nicht die zu durchsuchenden Daten sind.

Hat man hingegen einen Anwendungsfall wo Range-Scans notwendig sind, ist eine noSQL- bzw. allgemein nicht-relationale Datenbank völlig ungeeignet. Selbst wenn das Datenbanksystem bei gleichnamigen Attributen verschiedener Objekte automatisch Indizes generiert (bzw. generieren würde). ist das doch keinesfalls für komplexere Abfragen geeignet.

Ein weiteres Problem ist die Laufzeitcharakteristik von relationalen gegenüber objektorientierten Datenbanken in charakteristischen Szenarien.
Klar, bei einzelnen Datensätzen welche direkt referenziert werden können, punktet die ODB da Zugriff in konstanter (bzw. eigentlich logarithmischer Zeit in Abhängigkeit der DB-Größe), keine Locks, keine "komplizierten" Indizes für den PKey etc. Ähnliches gilt bei der Auflösung von Referenzen auf einzelne Objekte, verglichen mit einem JOIN ist der Rechenaufwand immer noch messbar niedriger.

Bei Filterkriterien nach anderen Attributen (oder sogar das übliche SORT + LIMIT nach einem JOIN) schaut es hingegen fatal aus. Im Optimalfall existiert das Attribut nach dem gefiltert wird NUR bei Objekten des gesuchten Typs, sprich der Index ist sauber. In diesem unwahrscheinlichen Fall schafft die ODB immerhin noch die gleiche Charakteristik wie die RDB. Andernfalls geht die Performance allerdings in den Keller, da durch die fehlende Normalisierung und zusammengesetzte Indizes (aktuell) kein effizienter Zugriff möglich ist.


Dazu kommt dann natürlich noch ein statischer Overhead, relationale Datenbanken haben sich vor allem deshalb so lange gehalten, weil sehr effizient was den Speicher- und Arbeitspeicher-Bedarf angeht. Der Overhead bei der Rechenleistung hingegen ist zu vernachlässigen. Prinzipiell lassen sich mit objektorientierten Datenbanken bei äquivalenten Datenbeständen auch Laufzeitcharakteristiken wie mit einer relationalen Datenbank erreichen, das erfordert allerdings wie auch schon bei relationalen Datenbanken eine gewisse Normalisierung sowie spezifische Hinweise für das Datenbanksystem wie komplexere Indizes auf zu bauen sind, was dann allerdings auch schon nicht mehr ohne eine entsprechende (zu mindestens teilweise) Normalisierung funktioniert.


Wenn es nur um den Komfort geht, ein objektorientiertes Datenmodell in einer Datenbank zu speichern, ohne sich mit den Fallstricken einer relationalen Datenbank auseinander setzen zu müssen (konkret die Unterscheidung zwischen Aggregation und Komposition sowie n:n-Relationen), so rate ich dennoch eher zu Systemen wie einer der vielen ORM-Implemenationen, diese sind einfach deutlich ausgereifter als vollständig objektorientierte Datenbanken was sich dementsprechend auch in der Performance der Anwendung nieder schlägt.

Persönlich würde ich die aktuelle Generation der ODBs nur für einen einzigen Zweck einsetzen, und zwar für den für den sie gebaut wurden: Zum Speichern von komplett inhomogenen Daten welche sich nicht mit vertretbarem Aufwand normalisieren lassen würden und bei denen nur über sehr wenige Attribute gefiltert werden muss, wenn überhaupt. Sprich als reiner Dokumentenspeicher und/oder Cache.
 
Ich arbeite mich gerade etwas in die MongoDB ein um festzustellen, ob ich dies meinen Studenten antun kann für ein Projekt (Bachelorarbeiten etc.).
Klar, Informatikstudenten kannst du das ohne weiteres antun. Es gibt sicherlich auch einige wirklich interessante Themen, die man zu NoSQL und BigData stellen könnte.

Also ich muss sagen, um wie mehr ich mir einarbeite, desto intuitiver und besser gefällt mir das Konzept der noSQL gegnüber der Relationalen Datenbanksysteme.
Intuitiver kann ich jetzt nicht behaupten.

Habt ihr damit schon ein Projekt verwirklicht?
Seid ihr gut damit klar gekommen oder hattet ihr starke Einstiegsprobleme?
Was haltet ihr von dem Konzept von Dokumentbassierten Datenbanken?
Nein, Gott sei Dank nichts, was über Spielerei hinaus gegangen ist.
Es geht, man muss damit vertraut werden.
Je nach Anwendungszweck brauchbar.
 
Zurück
Oben