Vorwort: wieso ein Blog zu PHP, Solr und Lucene?

Wieso ein Blog zu PHP, Solr und Lucene?
Gegenstand und Ausgangspunkt all unserer Aktivitäten auf diesem Gebiet war ein Projekt um ein Nachrichtenportal und die Aufgabe, Recherchen und Analysen im Nachrichtenbestand von über 10 Million News performant zu handeln. Die MySQL Volltextsuche kam da schnell an Ihre grenzen, Oracle war keine Alternative.
Es reifte also die Frage, wie können andere (etwa die Internetsuchmaschiene google) immense Datenmengen spielend handeln?
Wir lösten den MySQL volltext mit Lucene ab. Der Performancegewinn war dramatisch. Suchen im Datenbestand, die vorher über 10 Sekunden dauerten, brauchen mittels Lucene und Solr nur selten mehr als 20ms!
Eine neue Welt tat sich auf, die es zu erobern galt und schnell fiel auf, dass deutschsprachige Seiten zum Thema Mangelware sind. Dies soll sich mit diesem Blog ein wenig ändern.

Sie haben Fragen zu Solr/Lucene/PHP? Schreiben sie uns einen Kommentar!

Montag, 13. Januar 2014

mongoDB Data Import Handler für Solr

Wie bereits im vorhergehenden Post beschrieben ist derzeit keine Software im Netz verfügbar, die zum einen gepflegt wird und zum anderen performant große Datenmengen einer mongoDB in Solr indexiert.
Die Lösung für uns bestand darin, selber ein kleines Tool zu schreiben, dessen Aufgabe initial darin bestand, eine mongoDB komplett nach Solr zu importieren.

Ich habe es unter github abgelegt, für jedermann zugänglich: mongoSolrImporter


Der klassische Data Import Handler von Solr ist in Solr selber integriert. Der mongoSolrImporter arbeitet im Gegenzug dazu autark als externe PHP Skript.
In einer Konfigdatei werden dazum Solr Server, mongoDB Host, das Field-Mappiung und die mongoDB Query angegeben. Die Konfigurationsdatei wird dann dem Skript übergeben

user@host> php mongoSolrImporter.php -c mongoSolrImporter.ini

..und schon kanns losgehen.
Die Daten werden Blockweise in Solr indexiert. Dadurch wird im Vergleich zum mongo-connetor eine deutliche Performancesteigerung. der mongoSolrImporter verarbeitet pro Sekunde 2500 Dateien, wenn man auf einem Linuxsystem arbeitet über 6500 Dateien pro Sekunden, während der mongo-connector bei gleichem Datenbestand auf der gleichen Hardware etwa 33 Dokumente pro Sekunde verarbeitet. Der Geschwindigkeitsgewinn liegt folglich beim Faktor 200.

Zudem basieren die Daten auf einer Query, nicht auf dem oplog der mongoDB. Sind also auch bei abgelaufenem oplog noch greifbar.

Die Beschränkung liegt allerdings in der bisher mangelnden Unterstützung von mongoDB Datentypen. Initial ist das Tool so designt, dass mongoDB Daten verarbeitet werden, die ursprünglich aus einer relationalen Datenbank kommen. Die also keine Arrays oder embedded documents haben.

Keine Kommentare:

Kommentar veröffentlichen