MongoDB – Die dokumentorientierte JSON-Datenbank

MongoDB LogoMongoDB ist eine freie, besonders schnelle und die am meisten verwendete NoSQL-Datenbank überhaupt. Die Datensätze werden im einem JSON-ähnlichen Format gespeichert, daher ist MongoDB vor allem für JavaScript-Webanwendungen oder in Kombination mit Node.js Interessant.

Struktur #

MongoDBEine MongoDB-Datenbank kann mehrere Daten-Sammlungen (sogenannte Collections) enthalten. In einer Sammlung werden Daten-Zeilen gespeichert, die wiederum aus Feldern und zugehörigen Werten bestehen.

Die Daten werden im BSON-Format gespeichert, welches mit dem JSON-Format verwandt ist. Somit unterstützt MongoDB alle JavaScript-Datentypen und ist eine ideale Datenbank für die Node.js-Plattform.

Da MongoDB zu den dokumentenorientierten-Datenbanken gehört und eine Sammlung somit kein festes Feld-Schema hat, kann theoretisch jede Zeile verschiedene Felder, und jedes Feld einer Zeile einen unterschiedlichen Datentypen haben. Mit einer relationalen Datenbank (wie z.B. MySQL), bei der alle Datensätze in einer Tabelle gespeichert werden und somit einem festen Schema unterliegen, wäre dies nicht möglich.

Performance #

MongoDB selbst ist in der Programmiersprache C++ geschrieben, woraus sich bereits die Grundlage eines performanten Datenbank-Systems ergibt. Zudem arbeiten NoSQL-Datenbanken generell schneller/performanter als relationale Datenbanksysteme, da u.a. kein Tabellenschema und keine Beziehungen zwischen Tabellen aufgelöst bzw. beachtet werden müssen.

Es lassen sich Felder indizieren, was beim lesen der Datensätze zu einem Geschwindigkeits-Vorteil gegenüber unindizierten Feldern führt. Auch die Replikation von Daten wird unterstützt, sodass es möglich ist, die Daten auf mehren Servern zu spiegeln um so z.B. für eine höhere Ausfallsicherheit zu sorgen.

Falls hingegen die Leistung eines Datenbank-Servers nicht ausreichen sollte, kann man die Datensätze mittels Sharding (horizontale Skallierung) unter mehren Servern aufteilen.

JSON & BSON #

Wie bereits geschrieben, verwendet MongoDB das BSON-Format. BSON ist die Abkürzung für Bin­ary JSON und basiert auf JSON, was wiederum die Abkürzung für JavaScript Object Notation ist.

Im Unterschied zu JSON unterstützt BSON noch weitere Datentypen die nicht Teil der JSON-Spezifikation sind, wie z.B. einen extra Datums-Datentyp oder einen für binäre Daten.

Der folgende Code zeigt einen Datensatz im BSON-Format:

{
    "_id": { "$oid" : "5207fbc973e3af3820a7bb8d" },
    "vorname": "Max",
    "nachname": "Mustermann",
    "alter": 99
}

Das Feld _id wird übrigens, sofern nicht überschrieben, automatisch von MongoDB gesetzt und enthält eine BSON-ObjectId. Der Datentyp ObjectId setzt sich folgendermaßen zusammen:

  • 4-Byte – Zahl der Sekunden seit der UNIX-Epoche
  • 3-Byte – Maschinenidentifikations-Code
  • 2-Byte – Prozess-ID
  • 3-Byte – Zähler, beginnend bei einem Zufallswert

Weiterführendes #

Auf der offiziellen Website befindet sich eine umfangreiche Dokumentation (en), außerdem sind Tutorials zu MongoDB mit Node.js in Planung.

VN:F [1.9.22_1171]
Bewertung: 5.0/5 (5 Bewertungen)
MongoDB – Die dokumentorientierte JSON-Datenbank, 5.0 out of 5 based on 5 ratings
Regelmäßige Beiträge über Node.js

nodecodeAbonniere den kostenlosen NodeCode-Newsletter, und bleibe auf dem laufenden über neue Beiträge zum Thema Node.js. Darunter:

  • Informationen und Neuigkeiten rund um Node.js und zugehörigen Modulen
  • Vorstellung von interessanten Frameworks und Bibliotheken
  • Anleitungen und Tutorials zu Node.js und weiterführenden Technologien
  • Sowie vieles mehr...

schon 3 Kommentare gehe zum kommentieren

  1. viagra /

    I have been surfing online more than 4 hours today, yet I never found any interesting article like yours.

    It is pretty worth enough for me. In my view, if all web owners
    and bloggers made good content as you did, the web will be much more useful than ever before.

  2. Frestler /

    Hallo,

    erst einmal ein DICKES DANKESCHÖN für die beste deutschsprachige Seite für Node.JS in Verbindung mit MongoDB! Weiter so!

    Jetzt zu meiner Frage: Ich bin gerade dabei JavaScript zu lernen und möchte für meine Projekte Node.JS und MongoDB verwenden. Ist es möglich verschiedene Collections mit einander zu „verbinden“?
    Beispiel:
    In der Collection „User“ stehen alle Informationen der User, die jeweils eine eindeutige ID haben.
    In der Collection „Groups“ stehen alle Informationen der Gruppe sowie die ID der User die dieser Gruppe folgen bzw. teilnehmen.
    Mit PHP/SQL bekomme ich das umgesetzt, aber mit Node.JS bzw. JavaScript und MongoDB habe ich bisher keine Ahnung.

    Danke im Voraus!

    MFG

    1. NodeCode / Beitrags-Autor

      Freut mich, dass dir mein Webangebot zu Node.js gefällt. :-)

      Zu deiner Frage: Mit einer dokumentenorientierten Datenbank wie MongoDB könntest du einfach die IDs der User in einem Array der Gruppe speichern. Ein Gruppen-Objekt könnte dann beispielsweise folgendermaßen aussehen:

      {
          "_id": 1,
          "name": "Gruppen-Name",
          "beschreibung": "Eine kurze Beschreibung der Gruppe.",
          "users": [7, 24, 55, 3]
      }

      Wenn du nun z.B. an die Namen der einzelnen User einer Gruppe willst, so würdest du eine Schleife laufen lassen, welche die Objekte aller in dem Array enthaltenen User anhand der ID aus der „Users“-Collection abfragt.

      Falls sich die Verknüpfungen auf mehrere verschiedene Collections oder gar Datenbanken verteilen sollten, so musst du zusätzlich zur ID auch den Namen der jeweiligen Collection bzw. Datenbank angeben. In MongoDB gibt es hierfür eine Konvention namens DBRefs, siehe dazu auch: http://docs.mongodb.org/manual/reference/database-references/

      Für komplexere Aufgaben mit MongoDB und Node.js empfiehlt sich übrigens die Verwendung des Mongoose ODMs, womit sich unter Anderem Verknüpfungen automatisch herstellen lassen, und man dies somit nicht mehr manuell erledigen muss. Genaueres speziell zu den Verknüpfungen in Mongoose.js namens „Population“ findest du in der offiziellen Dokumentation: http://mongoosejs.com/docs/populate.html

hinterlasse einen Kommentar