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