© Ozz Design/Shutterstock.com
Teil 2: Praxiseinsatz: eine NoSQL-Datenbank in der eigenen Applikation

Vielfalt bei der Datenspeicherung


NoSQL-Datenbanken haben Vorteile, zum Beispiel bei der Verwaltung von großen Datenmengen, die sich nicht oder nur schwer in eine klassische Tabellenstruktur pressen lassen. Häufig eingesetzt wird MongoDB. Wir haben uns die Datenbank angesehen und untersucht, wie man Daten aus PHP in MongoDB ablegt und wieder liest.

Der erste Teil dieser Artikelserie war eine Einführung in das Thema NoSQL-Datenbanken. Neben den Konzepten haben wir uns mit den Unterschieden zu klassischen relationalen Datenbanken beschäftigt. Nun geht es weiter in die Praxis. Als Datenbank haben wir MongoDB ausgewählt. Wir stellen diese Datenbank ausführlicher vor, zeigen Installation und Einrichtung und schauen uns an, wie man mit MongoDB aus PHP arbeitet.

MongoDB im Überblick

MongoDB ist eine dokumentenorientierte NoSQL-Datenbank, die in der Programmiersprache C++ geschrieben ist [1]. Das System wurde der Öffentlichkeit 2009 vom US-Start-up 10gen nach rund zwei Jahren Entwicklung als Open-Source-Lösung vorgestellt. MongoDB steht für die Betriebssysteme Windows, macOS und Linux zur Verfügung. Es werden sowohl 32- als auch 64-Bit-Systeme unterstützt. Es wird in einer Vielzahl von produktiven Anwendungen eingesetzt und sie zielt insbesondere auf Anwendungen mit einer großen Menge an Daten. MongoDB weist die folgenden Schlüsselfunktionen (Key Features) auf [2]:

  • Hohe Performance: MongoDB bietet eine Datenpersistenz mit hoher Leistung, insbesondere werden eingebettete Datenmodelle unterstützt und damit die I/O-Aktivitäten auf dem Datenbanksystem reduziert. Über Indizes sind schnelle Abfragen möglich.

  • Leistungsfähige Abfragesprache: MongoDB unterstützt eine umfassende Abfragesprache zur Unterstützung von Lese- und Schreibvorgängen (CRUD) und für Aufgaben der Datenaggregation, Textsuche und für Geodatenabfragen.

  • Hohe Verfügbarkeit: Die Replikationsfunktion von MongoDB bietet ein automatisches Failover und Datenredundanz. Unter einem Failover versteht man einen ungeplanten Wechsel zwischen zwei oder mehreren Diensten bei einem einseitigen Ausfall. Als Folge können die Dienste trotz des Ausfalls eines der Systeme hochverfügbar gehalten werden [3]. Unter einem Replica Set (Replikatsatz) versteht man bei MongoDB Server, die denselben Datensatz verwalten, für Redundanz sorgen und damit die Datenverfügbarkeit erhöhen.

  • Horizontale Skalierbarkeit: MongoDB bietet eine horizontale Skalierbarkeit als Teil der Kernfunktionalität. Beim so genannten Sharding werden Daten auf mehrere Computer verteilt. Ab Version 3.4 unterstützt MongoDB das Erstellen von Datenzonen basierend auf dem Shard Key.

  • Unterstützung für mehrere Speicher-Engines: MongoDB unterstützt die WiredTiger Storage Engine (einschließlich Verschlüsselung im Ruhezustand) und die In-Memory Storage Engine. Außerdem bietet MongoDB eine Plug-in-Lösung, mit der Engines für MongoDB von Drittanbietern entwickelt werden können.

MongoDB kann nicht nur auf einer Vielzahl von Systemen genutzt werden, sondern es stehen auch Treiber für die unterschiedlichsten Programmiersprachen zur Verfügung. Auf den Einsatz von MongoDB aus einem PHP-Programm heraus kommen wir gleich zurück. Unser Zwischenfazit: MongoDB ist eine leistungsfähige, dokumentenbasierte Datenbank, die im Einsatz sehr flexibel ist.

Listing 1: Ein Beispiel für ein Dokument in MongoDB [5]

var mydoc = { _id: ObjectId("5099803df3f4948bd2f98391"), name: { first: "Alan", last: "Turing" }, birth: new Date('Jun 23, 1912'), death: new Date('Jun 07, 1954'), contribs: [ "Turing machine", "Turing test", "Turingery" ], views : NumberLong(1250000) }

Daten werden in MongoDB in Dokumenten gespeichert. Ein Dokument besteht aus einer Menge von Eigenschaften, die sich wiederum aus Namen und Werten zusammensetzen. Werte können einfache Datentypen, Felder oder andere Dokumente sein. Wichtig: Dokumente sind schemalos, d. h. sie haben keinen festen Aufbau, sondern unterscheiden sich von Dokument zu Dokument. Dokumente werden im so genannten BSON-Format gespeichert (Kasten: „Das BSON-Format“).

Jedes Dokument kann eine beliebige Anzahl an Feldern besitzen. Eine Verschachtelung ist möglich. Ein Beispiel zeigt Listing 1. Jedes Dokument besitzt automatisch einen Primärschlüssel (_id). Falls es nicht explizit überschrieben wurde, ist der Schlüssel vom Typ ObjectId. Der 12 Byte große Datentyp setzt sich aus einem Zeitstempel (4 Byte), einem Rechneridentifizierer (3 Byte), einem Prozessidentifizierer (2 Byte) und einem Zähler (3 Byte) zusammen. Dadurch kann jedes Dokument eindeutig identifiziert und genau lokalisiert werden. Dokumente werden in Collections zusammengefasst, die Dokumente mit völlig unterschiedlichem Aufbau beinhalten. Im Vergleich zu einer relationalen Datenbank sind Collections mit den Tabellen und Dokumente den Spalten ähnlich. In Listing 1 sehen Sie folgende Datentypen:

  • _id: ObjectId

  • name: eingebettetes Dokument mit den Feldern first und last

  • birth/death: Daten vom Typ Date

  • contribs: Array vom Typ string

  • views: Datentyp vom Typ NumberLong

Create, Read, Update, Delete: CRUD

Mit CRUD bezeichnet man bekanntlich die Basisoperationen, die jedes Datenbankmanagementsystem (DBMS) bereitstellen muss. Zum Vergleich: In relationalen Datenbanken verwendet man in der Regel die Abfragesprache SQL. Die Basisoperationen werden über Methoden aufgerufen, die nach dem Vorbild von JavaScript aufgebaut sind. Eine solche Methode hat demnach die folgende Syntax: db.collection.method(). Im Einzelnen:

  • Create: Ein neues Dokument wird mit der Methode insert() generiert. Als Parameter erwartet die Funktion ein Dokument im Format BSON, das in die Collection eingefügt wird. Existiert die C...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang