Auf alle Fälle die Tabellen trennen!
Du hast ja sicher zu einer Domain mehrere Pfäde.
Je nachdem, wie aufwendig du es machen willst, könntest du sogar noch die einzelnen Subdomains zur Domain trennen und auch diese dann in Zusammenhang bringen.
Bevor du mit der Planung beginnst, musst du aber wissen, was du überhaupt willst. Ehrlich gesagt, wundert es mich bei dir, dass du dir da nicht komplett bereits im Klaren bist :wink:
Willst du mehrere Crawler - von verschiedenen Servern - einsetzen? Dann würden mir folgende Punkte einfallen, aus denen die Suchmaschine besteht:
Zum einen das WWW. Aus dem nimmst du schließlich die Daten.
Anschließend die Webcrawler - wenn du hier mehrere einsetzen willst, empfiehlt sich eine eigene Struktur, die die Webcrawler steuert. Dieser \"Organizer\" muss festlegen, ob eine schon besuchte Seite neu gecrawlet werden soll, oder ob eine neue Seite entdeckt werden soll.
Diese Information bekommt der Organizer von einem Dokumentenindex.
In diesem sollte jedes einzelne Dokument mit allen Infos verzeichnet sein.
Um dem Organizer die Arbeit zu geben, muss jedes Dokument auch einen Crawl-Status bekommen.
Hier würde mir einfallen:
- Noch nicht gecrawlet, nur Link gefunden
- Wird gerade gecrawlet
- Zuletzt gecrawlet am 2007-01-05 12:30:08
Hierbei solltest du allerdings natürlich mit Statuscodes, bzw. mE nach sogar Timestamp arbeiten - eine Suchmaschine speichert in der Regel enorm viele Infos, daher solltest du Speicherplatz sparen.
Eventuell könntest du auch hier eine Checksumme der zuletzt gespeicherten Seite speichern - wenn du sie neu crawlest kannst du dann relativ schnell feststellen, ob sich auf der Seite was geändert hat.
Inwieweit eine Speicherung des Datums der ersten Indexierung Sinn macht, musst du selber entscheiden.
Eventuell könntest du auch aus älteren Daten einen Wert berechnen, wie oft sich die Seite ändert. Diese Informationen kannst du wieder an den Organizer übergeben, der dann die Webcrawler diese Seite öfters ansteuern lässt.
Zusätzlich sollte natürlich noch der Titel und eventuelle Meta-Informationen gespeichert werden.
Anschließend musst du entscheiden: Du kannst zum einen das gesamte HTML-Dokument auf deine Server ziehen und lokal abspeichern, oder du berechnest direkt aus der Indexierung die benötigten Keywords, wertest die auch gleich (Stichwort <h1>, <strong> usw.) und speicherst ausschließlich diese.
Die Keywords könntest du gleich direkt in den Dokument-Index legen, oder du legst eine eigene Keyword-Tabelle an und definierst die mit einer n:n-Verbindungs-Tabelle.
Zitat:
Irgendwie kommt\'s mir so vor, als ob ich zum Schluss mit 15 Tabellen dahock, in denen außer einem Fremdschlüssel und einem einzigen Wertefeld nichts drinnen ist...
Inwieweit du hier auf eine saubere Datenbankstruktur achtest, musst du selber entscheiden. Aber denke daran: Versuch so viel wie möglich Speicherplatz zu sparen.
Da du deine Suchmaschine nur auf ein Thema begrenzen willst, hast du es hier leichter. Trotzdem musst du im Dokument-Index auch die Seiten speichern, die nicht zum Thema gehören und entsprechend kennzeichnen - es wäre sinnlos, wenn der Crawler diese Seiten weiterhin besucht.
Desweiteren solltest du im Dokument-Index die Angaben der robots.txt, bzw. des robots-Meta-Tags verzeichnen: index, follow, bzw. noindex nofollow ist für die Crawler und die weitere Datenspeicherung durchaus interessant.
Auch der Content-Type ist in der Dokument-Index sicher interessant - so wäre es z.B. sinnlos, ein Bild ein zweites mal zu crawlen.
Für jeden Request des Crawlers würde ich in einem eigenen Storageserver die Antwort speichern.
Vorallem die einzelnen HTTP-Status-Codes sind da wahrscheinlich für dich interessant: 200, 301, 304, 401, 404, 414, 500 und 503 habe ich gerade rausgesucht und könnten für dich interessant sein. Je nach Statuscode musst du auch im Dokument-Index richtig reagieren: Die URL bei einem 301er ändern, bzw. neu speichern und den alten für ungültig erklären. Bei mehrmaligen 4XXern ist die Seite wohl dauerhaft offline und kann ebenfalls gelöscht werden.
Was für dich wohl noch interessant ist, sind doubletten-erkennung. wenn www.cybton.com den selben Inhalt wie www.cybton.net musst du das erkennen und deine Crawler anweisen nur eine Domain davon zu besuchen. Hier ist es wahrscheinlich am einfachsten, einfach die Pfäde zweier Domains zu vergleichen.
So, ich hoffe, ich konnte dir einige Anregungen geben :lol:
Viele Grüße
Benno