Zend_Log mit mongoDB
mal ein Kurzer Beitrag zu mongoDB.
Hab natürlich nur den PHP Treiber ausprobiert, Java wird aber wohl ähnlich wenn nicht gleich einfach zu bedienen sein.
Bin durch diesen Artikel draufgestoßen http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging und hab es mal bei einem Projekt testweise eingebunden.
Zeigt zumindest mal einen Teil der Dinge in denen mongoDB gut ist:
- Asynchrone Inserts, daher kein warten auf ein File
- es gibt sogenannte Capped Collections, bei denen fliegen einfach die ältesten Daten aus der Collection raus (Konfigurierbar nach Anzahl der Objekte und Größe der Collection) quasi eine automatische rotation
- schnell
Um mongoDB zum Logging zu verwenden, hab ich lediglich einen neuen Zend_Log_Writer erstellt welcher die Logging Daten in eine mongoDB schreibt. Und diesen dem Logger zur Verwendung gegeben.
Dafür musste ich ungefähr 4 Zeilen Code selber schreiben:
…
$mongo = new Mongo();
$this->_db = $db->selectDB( “logs” )->createCollection(date(‘Y-m-d’).’logs’, true, 100000, 1000);
$this->_db->insert($dataToInsert);
…
der Rest der Arbeit bestand draus mir den Zend_Log_Writer_Db zu kopieren und die obigen Zeilen dort einzubauen.
Ok also was hat es gebracht? Gebracht hat es das ich jetzt die Anwendung mit fast vollem Log Level fahren kann und sich an der Geschwindigkeit zumindest spürbar nichts ändert.
Weitere Idee wäre zb, das man einen zentralen Logging Server hat und von anderen Anwendungen einfach dort hin schreiben kann.
mongoDB bietet auch so abgefahrene Sachen wie Replizierung und Fail-Over Lösungen.
Durchaus interessant wenn mal eine Datenbank gesucht wird in welche man einfach Objekte reinhauen kann.
Achso und den Server selbst aufsetzen war im Endeffekt nur mongoDb Archiv entpacken und mongod run aufrufen.
Links: