Welche Datenbank für Crawler / Scraper?

8

Ich recherchiere gerade, welche Datenbank ich für ein Projekt verwende, an dem ich gerade arbeite. Hoffentlich könnt ihr mir ein paar Tipps geben.

Das Projekt ist ein automatisierter Webcrawler, der Websites gemäß einer Benutzeranforderung überprüft, Daten unter bestimmten Umständen scrapt und Protokolldateien davon erstellt, was getan wurde.

Anforderungen:

  • Nur wenige Tabellen mit wenigen Spalten; Spalten vordefinieren ist kein Problem
  • Keine allzu komplexen Assoziationen zwischen Modellen
  • Riesige Menge an Datum & amp; zeitbasierte Abfragen
  • Aufgrund der Protokollierung wird die Datenbank schnell wachsen und viel Speicherplatz verbrauchen
  • Sollte in der Lage sein, über mehrere Server zu skalieren
  • Felder enthalten meistens ids (int), Strings (ca. 200-500 Zeichen maximal) und Unix-Zeitstempel
  • Zwei verschiedene Arten von Servern lesen / schreiben gleichzeitig Daten direkt von / zu:
    • Eine (/ später mehr) App, die Benutzereingaben aufnimmt und Ergebnisse auf Anfrage anzeigt
    • Ein (späterer) Node.js-Server, der als ausführender Crawler / Scraper fungiert. Es wird genug Last haben, um kontinuierlich zu laufen und jede Sekunde Dutzende Datenbankabfragen zu machen.

Ich nehme an, dass es weder eine Graphdatenbank (keine komplexen Assoziationen) noch ein speicherbasierter Schlüssel / Wert-Speicher (zu viele Daten, die im Cache gespeichert werden sollen) sein wird. Ich bin immer noch am Zaun für jede andere Art von Datenbank, die ich finden könnte, jeder scheint seine Verdienste zu haben.

Also, irgendeinen Rat von den Profis, wie sollte ich entscheiden?

Danke.

    
KonstantinK 12.08.2012, 07:35
quelle

3 Antworten

3

Ich würde Vladimir zustimmen, dass Sie eine dokumentenbasierte Datenbank für dieses Szenario in Erwägung ziehen würden. Ich kenne MongoDB am besten. Meine Gründe für die Verwendung hier sind wie folgt:

  1. Ihre "Schemaanforderungen" von "nur ein paar Tabellen mit wenigen Spalten" passen gut zur NoSQL-Natur von MongoDB.
  2. Genauso wie oben für "keine übermäßig komplexen Verknüpfungen zwischen Knoten" - Sie möchten entscheiden, ob Sie verschachtelte Dokumente bevorzugen oder dbref verwenden (ich bevorzuge das frühere)
  3. Riesige Menge an zeitbasierten Daten (und anderen Skalierungsanforderungen) - MongoDB skaliert gut durch Sharding oder Partitionierung
  4. Lese- / Schreibzugriff - deshalb empfehle ich MongoDB über etwas wie Hadoop. Die Anforderung einer interaktiven Abfrage wird am besten von einem anderen Speicher als einem Hadoop-Speicher erfüllt, da dieser Speichertyp für Stapelanforderungen (anstelle von interaktiven Abfragen) ausgelegt ist.
Lynn Langit 16.08.2012, 03:01
quelle
3

Google hat eine Datenbank mit dem Namen "BigTable" für das Crawlen, Indizieren und das suchbezogene Geschäft erstellt. Sie haben ein Papier darüber veröffentlicht (googeln Sie nach "BigTable", wenn Sie interessiert sind). Es gibt mehrere Open-Source-Implementierungen für Big-Table-ähnliche Designs, eines davon ist Hypertable . Wir haben einen Blogbeitrag, in dem eine Crawler / Indexer-Implementierung ( Ссылка ) beschrieben wird, die von den Jungs von sehrch.com geschrieben wurde. Und auf Ihre Anforderungen schauen: Alle von ihnen werden unterstützt und sind häufige Anwendungsfälle.

(Disclaimer: Ich arbeite für hypertable.)

    
cruppstahl 12.08.2012 20:33
quelle
0

Sehen Sie sich eine dokumentenorientierte Datenbank wie eine CouchDB oder MongoDB .

    
Vladimir 12.08.2012 07:48
quelle