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
MongoDB 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.













