Frage

Ich bin derzeit ein Web-Crawler zu schreiben (mit dem Python-Framework scrapy ).
Vor kurzem hatte ich eine Pause / Resume-System zu implementieren.
Die Lösung, die ich umgesetzt ist die einfachste Art und grundsätzlich speichern Links, wenn sie geplant werden, und markiert sie als ‚verarbeitet‘, sobald sie tatsächlich sind.
So ich bin in der Lage, diese Verbindungen zu holen (natürlich gibt es ein wenig mehr gespeichert als nur eine URL, Tiefenwert, die Domäne des Link gehört, etc ...), wenn die Spinne wieder aufzunehmen und so weit alles gut funktioniert.

Im Moment habe ich nur gewesen, eine MySQL-Tabelle unter Verwendung diese Speicherwirkung zu handhaben, vor allem für schnelles Prototyping.

Nun würde Ich mag wissen, wie ich das optimieren könnte, da ich eine Datenbank soll nicht die einzige Option hier verfügbar sein glaube. Durch optimize, meine ich, ein sehr einfaches und Licht-System, während immer noch eine große Menge an Daten, die in kurzer Zeit geschrieben zu handhaben zu können,

Vorerst sollte es in der Lage sein, das Crawling für ein paar Dutzend von Domains, zu handhaben, die Speichermittel ein paar tausend Links eine Sekunde ...

Vielen Dank im Voraus für Anregungen

War es hilfreich?

Lösung

Der schnellste Weg, um Dinge von persistierenden ist in der Regel nur um sie zu einem Protokoll anhängen - so ein völlig sequentielle Zugriffsmuster minimiert Platte sucht, die in der Regel den größten Teil der Zeit die Kosten für die Lagerung. Nach dem Neustart Sie wieder lesen Sie das Protokoll und den Wiederaufbau der Speicherstrukturen, dass Sie auch im laufenden Betrieb den Bau wurden, wie Sie in das Protokoll in erster Linie wurden angehängt wird.

Ihre spezifische Anwendung optimiert werden könnte weiter, da es nicht notwendigerweise 100% Zuverlässigkeit erfordern - wenn Sie ein paar Einträge aufgrund eines plötzlichen Absturz Verfehlung-Schreiben, ah gut, Sie werden sie einfach wieder kriechen. Also, Ihre Log-Datei zwischengespeichert werden kann und muss nicht zwanghaft fsync'ed werden.

stelle ich mir die Suchstruktur auch bequem in den Speicher passen würde (wenn es nur für ein paar Dutzend Websites ist könnte man wahrscheinlich nur halten ein Set mit allen ihren URLs, keine Notwendigkeit für die Blüten Filter oder etwas Phantasie) - wenn es didn‘ t, können Sie nur eine Reihe von aktuellen Einträge in Erinnerung behalten müssen, und Dump periodisch diesen Satz auf die Festplatte (zB Zusammenlegung aller Einträge in eine Berkeley DB Datei); aber ich werde nicht in Details zu diesen Optionen quälenden da es nicht angezeigt wird Sie sie benötigen.

Andere Tipps

Es gab einen Vortrag auf PyCon 2009 mitgeteilt, dass Sie interessant finden, Precise Zustandswiederherstellung und Neustart für Daten-Analyse-Anwendungen von Bill Gribble.

Eine weitere schnelle Möglichkeit, Ihren Anwendungszustand speichern kann Gurke serialisiert zu benutzen, Ihr Anwendungszustand auf der Festplatte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top