software1987 Tech-Blog

20Aug/101

PHP mit MongoDB

Als Google vor mehr als einem Jahr die Sprache "Go" (golang.org) einführte fehlte es in der Community an einer Möglichkeit Codeschnipsel mit Syntaxhighlighting online zu stellen. Ich machte mich also recht schnell daran einen nopaste/pastebin Klon zu entwickeln welcher neben den üblichen Sprachen auch "Go" unterstützt.

Da das ganze an sich keine sonderliche herausforderung darstellt (Datenbank anlegen + Code schreiben), wollte ich die Aufgabe dazu nutzen mich in etwas neues einzuarbeiten. Ich entschied mich dafür, nicht wie üblich PostgreSQL oder MySQL als Datenbank zu nutzen sondern eine NoSQL-Datenbank. Meine Wahl fiel auf "MongoDB", welche ich hier kurz vorstellen möchte.

NoSQL

NoSQL steht für "Not only SQL" und meint damit Datenbanken die nicht auf ein relationales Schema zurückgreifen (oder vielmehr die Bewegung dahinter). Relationale Datenspeicher leiden oft an Leistungsproblemen insbesondere bei datenintensiven Applikationen oder hoher Belastung. Aus diesem Grund setzen stark belastete Dienste wie Twitter (Cassandra, Hadoop?) und Facebook (Cassandra) auf NoSQL-Datenbanken die diesen Problemen mit verteilten Berechnungen aus dem Weg gehen.

MongoDB

Logo von MongoDBMongoDB ist eine dokumentenorientierte Datenbank. In die gleiche Kategorie zählt auch die in Erlang geschriebene CouchDB. Grundeinheit einer dokumentenorientierten Datenbank ist im Gegensatz zu einer relationalen Datenbank mit einem festen Schema das Dokument. Wie das Dokument strukturell aussieht bleibt dem jeweiligen Entwickler komplett überlassen. Ein Dokument wird in der Datenbank über einen eindeutigen Identifikator angesprochen.

MongoDB ist in C++ geschrieben, liegt als Open Source vor und skaliert. Die Datenbank verwaltet JSON-artige Dokumente und unterstützt eine Vielzahl von Datentypen (alle BSON Datentypen).

Installation

Linux

Unter Linux ist MongoDB meist bereits als Paket verfügbar, weshalb ich hier nicht weiter darauf eingehen werde. Unter Debian genügt z.B. ein simples:

apt-get install mongo

FreeBSD

Seit Version 8.0 ist bei FreeBSD ein Port für MongoDB verfügbar. Um diesen zu bauen und zu installieren genügt es folgende Befehle auszuführen:

cd /usr/ports/databases/mongodb
make && make install

Windows

Ein fertiger Build für Windows lässt sich direkt von der MongoDB Webseite herunterladen. Zu bemerken ist, dass bei sämtlichen 32bit-Versionen die verwaltbare Datenmenge auf ~2,5 GB beschränkt ist (mehr dazu im MongoDB Blog).

Das Archiv entpackt man ganz einfach an einen Ort seiner Wahl (bei mir C:\Programme\MongoDB\). Im Unterverzeichnis "bin" liegen die ausführbaren Dateien. Eine weitere Installation ist nicht von nöten. Mongo braucht für den Datenspeicher noch ein eigenes Verzeichnis, welches ich unter C:\Programme\MongoDB\data\db\ angelegt habe. Standardmäßig würde sonst C:\data\db\ benutzt, welches aber auch angelegt werden muss.

Die Datenbank lässt sich nun über die Kommandozeile ganz einfach starten:

C:\> C:\Programme\MongoDB\bin\mongod.exe --dbpath C:\Programme\MongoDB\data\db\

Wie die letzte Zeile schon andeutet ist über Port 28017 ein Webinterface verfügbar, welches informationen über die Datenbank anzeigt. Im Browser kann man dieses ganz einfach über http://localhost:28017 ansteuern. Die Datenbank selbst lauscht auf Port 27017.

Wer möchte, kann MongoDB auch als Windows Service starten und laufen lassen. Hierfür muss die folgende Zeile ausgeführt werden, welche mongod.exe als Windows Service Installiert:

C:\> C:\Programme\MongoDB\bin\mongod.exe --install

Um die Datenbank danach als Service zu starten führt noch die nächste Zeile aus:

C:\> C:\Programme\MongoDB\bin\mongod.exe --service

Installation der PHP-Extension

Linux

Unter Linux lässt sich die Extension für den Zugriff auf MongoDB mittels “pecl” (PHP Extension Community Library) installieren:

pecl install mongo

Sollte alles ohne Probleme verlaufen sein, ist die Extension nun verfügbar. Überprüfen lässt sich das, ggf. nach einem Neustart des Webservers, über die phpinfo() die nun eine Kategorie für “mongo” bereit halten sollte.

Windows

Unter Windows funktioniert die Methode mit pecl leider nicht (das pecl4win Projekt ist seit einiger Zeit offline). Im PHP Manual findet sich aber die bereits vorkompilierte .dll-Datei für die Extension, welche man nur herunterladen und ins passende Verzeichnis verschieben muss.

Zusätzlich muss nun noch ein Eintrag in die php.ini gemacht werden, damit PHP die neue Extension auch lädt:

extension=php_mongo.dll

Nach einem Neustart des Webservers sollte der Aufruf von phpinfo() nun eine Kategorie für "mongo" bereithalten und anzeigen.

hat dir dieser Artikel gefallen?

Dann abonniere doch diesen Blog per RSS Feed!

Kommentare (1) Trackbacks (0)
  1. hi, mongoDB will ich mir unbedingt anschauen. Nun sitze ich aber bereits den ganzen Tag an der Installation, hab zich Anleitungen gelesen aber bekomme es nicht ganz hin. Also mongo läuft – user ist angelegt – aus der Konsole alles okay. Nur die PHP-Erweiterung geht nicht, also phpinfo() gibt unter den ini-files mongo.ini aus aber sonst nichts. was fehlt? habe es zuletzt so gemacht wie hier beschrieben. Grüsse


Leave a comment

Noch keine Trackbacks.