MongoDB

Aus TBZ_-_Wiki
Version vom 9. April 2013, 19:47 Uhr von IvanC (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

MongoDB ist eine dokumentbasierte Datenbank, die zur Familie der NoSQL Datenbanken gehört. Im Vergleich zu klassischen, relationalen Datenbanksystemen, zeichnen sich NoSQL Datenbanken vor allem durch die flexiblere Speicherung von Daten aus. NoSQL steht für "no sql" oder auch "not only sql", da für die Interaktion mit dem Datenbanksystem andere Sprachen und Protokolle als SQL zum Einsatz kommen.

Die Architektur vieler NoSQL-Datenbanken ist zudem auf Skalierbarkeit ausgelegt.

Interaktion

Die direkte Interaktion mit einer MongoDB Datenbank erfolgt über eine Javascript Shell. Auf der MongoDB Homepage findet man eine Onlineversion, mit der man direkt verschiedenste Dinge ausprobieren kann.

Zusätzlich existieren Treiber für die meisten gängigen Webprogrammiersprachen wie PHP, Javascript, Java und Ruby etc.

Datenformat

Daten werden in MongoDB als BSON abgespeichert. BSON steht für "binary json" und ist eine Erweiterung von JSON, welche die Verarbeitung von binären Daten erlaubt, was in Javascript nicht möglich ist. Relationen werden in MongoDB über Dokumente, die andere Dokumente enthalten modeliert, ähnlich wie in Objektorientiertenprogrammiersprachen. MongoDB fügt zudem jedem Datensatz den speziellen Typ ObjectId hinzu, bei dem es sich um einen 12-Byte langen Typ handelt, der ein Dokument eindeutig identifiziert, ähnlich wie ein Primärschlüssel in einer relationalen Datenbank.

Collections und Documents

Das Pendant zu Tabellen und Datensätzen(Rows) von relationalen Datenbanken sind Collections und Documents. Eine Collection hat jedoch im Gegesatz zu einer Tabelle keine feste Struktur, d.h. einzelne Documents in einer Collection können theoretisch eine total andere Struktur haben.

Wie im Bild folgenden Bild zu entnehmen ist, besteht die Datenbank "moo" aus den beiden Collections "users" und "posts". Die Daten sind Praktisch identischen mit dem JSON Format, d.h. ein Attribut setzt sich immer aus einem Name(z.B. "comment") und einem Wert zusammen.

Aufbau von MongoDB Daten Quelle: http://www.10gen.com/static/downloads/Sample_MongoDB_ebook_german.pdf

CRUD

Grunsätzliches

Folgende Beispiele lassen sich alle direkt auf der Online Shell (MongoDB Menupunkt "Try it out"] ausprobieren. Javascript kenntnisse sind von Vorteil aber nicht umbedingt notwendig. In dieser Shell kann man auch ein Tutorial machen, dass einem die Grundlagen von MongoDB schnell nahe bringt. Details zu den folgenden Operationen findet man unter CRUD.

Create

Um Daten in eine Datenbank zu speicheren, wird folgender Befehl verwendet: [DATENBANK].[COLLECTION].AKTION(PARAMETER). Im Gegesatz zu SQL muss eine Collection nicht zuerst angelegt werden, falls die Collection nicht existiert, wird sie automatisch vom Datenbanksystem erzeugt. Man beachte, dass nur einer der beiden Datensätz das Attribut "alter" hat.

  • db.users.save({name: "mongo liebhaber"})
  • db.users.save({name: "sql liebhaber", alter: 99})

Read

  • db.users.find()

Gibt einem alle Datensätze der Collection

  • db.users.findOne()

Gibt einem den ersten gefundenen Datensatz einer Collection

  • db.users.find({alter: 99})

Alle Datensätze, bei denen das Attribut "alter" existiert und den Wert 99 hat.

  • db.users.find({name: "mongo liebhaber"})

Alle Datensätze, bei denen das Attribut "name" existiert und den Wert "mongo liebhaber" hat.

Update

Ein Update befehl hat die folgende Form: db.collection.update( <query>, <update>, <options> ).

db.users.update({name: "mongo liebhaber"}, {$set: {name: "hans"}})

Setzt bei allen Datensätzen, die das Attribut "name" mit dem Wert "mongo liebhaber" besitzen, den Wert auf Hans. "$set" ist einer von vielen Operatoren, die komplexe Möglichkeiten bieten, Daten zu manupulieren.

Delete

  • db.bios.remove( { 'name' : /^s/ } )

Löscht alle Dokumente, bei denen das Attribut "name" mit einem s beginnt. Regular Expression lassen sich also direkt in Einfrage einbetten.

Einen sehr ausführlichen Vergleich zwischen SQL und NoSql bzw. MongoDB findet man unter SQL Comparison.

Use Cases

  • Data Mining:

Durch die flexible Dokumentstruktur eignet sich MongoDB äusserst gut für Data Mining

  • Content Management System

Content Management System profitieren auch von der flexiblen Datenstruktur. In einem Webshop z.b. kann die die Form der Daten nicht immer vorraus gesagt werden. Was mit klassischem SQL ein Problem darstellt, ist somit in MongoDB leicht gelöst.

  • Webapplikationen und Services

Da die Datenstruktur von MongoDB leicht in JSON umgewandlet werden kann, ist MongoDB sehr gut für moderne Javascript Anwendungen, die vor allem im mobilen Bereich sehr verbreitet sind, geeignet. Auch für den herkömmlichen gebrauch von AJAX eignet sich das Datenformat durchaus.

Links zum Thema