Hi Julian,
In den letzten Wochen kam mir mehr und mehr der
Gedanke eine kleine Suchmaschine für ein bestimmtes
Themengebiet aufzubauen. Nur habe ich absolut keine
Ahnung wie man da anfängt.
Ich empfehle Dir, damit zu beginnen, Such-Formulare zu basteln. Überlege Dir, was Deine Anwender alles tun können sollen.
Dabei lernst Du nämlich zwei Dinge:
a) _Welche_ Informationen muß ich in meiner Datenstruktur gespeichert haben? (Das sagt noch nichts darüber aus, _wie_ die gespeichert sein müssen.)
b) Welche Operationen auf diesen Informationen (Strings-Vergleich, regular expression match, ...) muß ich durchführen können? (Das sagt noch nichts darüber aus, wie diese Operationen implementiert sein werden.)
Beides zusammen liefert Dir wertvolle Informationen sowohl für Deine erforderlichen Datenstrukturen als auch für die Grundzüge der notwendigen Algorithmen.
Wenn Du weißt, _was_ Deine Suche können soll, dann bist Du in der Lage, eine Aufgabenstellung zu schreiben - diese ist Voraussetzung für _alles_ Nachfolgende. Das "was" ist unverzichtbar.
Diese Phase des Projekts dauert etwa 30% der Gesamtlaufzeit - also nimm sie ernst!
Erst danach geht es damit los, sich das "wie" zu überlegen. _Jetzt_ kommen Fragen wie "welche Datenbank" oder "welche Programmiersprache".
Aufgrund der Datenmodellierung weißt Du nun nämlich schon, was Deine zu verwendenden Tools können müssen - also kannst Du solche, die etwas Notwendiges nicht können, zuverlässig verwerfen. Das ist viel schlauer, als erst mal ein Tool zu raten und später zu verzweifeln, weil es eine lebensnotwendige Kleinigkeit nicht (oder nicht performant genug - das kann genauso schlimm sein) unterstützt.
Die gesamte Programmierung wird weitere 30% des Projekts ausmachen. Das mag Dir niedrig vorkommen, aber das ist ein guter Ansatzpunkt für Schätzungen.
Bedenke, daß Dein Produkt anschließend noch gründlich getestet werden will (auf Korrektheit, Usability, Performance usw.), und die Dokumentation, das Benutzerhandbuch, das Betriebskonzept etc. muß schließlich auch irgendwer aufschreiben. Das alles kostet viel Zeit.
- Welche Voraussetzungen an Hardware müssten für
sowas gegeben sein?
Das hängt von vielen Faktoren ab, die Du nicht genannt hast. Die Zahl der erwarteten Zugriffe und die mittlere Suchdauer (letztere hängt wiederum von der Effizienz Deiner Implementierung und von der Menge der durchsuchbaren Daten ab) ist beispielsweise viel wichtiger als die Menge der Daten allein.
Es kann durchaus sein, daß Du erst mal eine abgespeckte proof-of-concept-Implementierung machen mußt, um zu sehen, wie Du mit der Performance hinkommst, bevor Du wirklich gute Aussagen für die später zu verwendende Hardware machen kannst.
- Welche Software (z.B. Datenbank) wäre vermutlich
unabdingbar?
Das kann man in diesem Stadium noch nicht beantworten. (Man sollte es in diesem Stadium sogar nicht mal _fragen_. ;-)
- Wie würde sowas von der Programmierung her in etwa
aussehen (Aufbau/Ablauf)?
Auch dafür ist es zu früh.
Woher beziehst Du Deine zu durchsuchenden Informationen? Sind das ausschließlich lokale Seiten oder mußt Du im Web auf Beutesuche gehen? Schon dieses Detail wird für das Betriebskonzept Deines Indexers essentiell sein.
Also: Aufgabenstellung schreiben - danach sehen wir weiter.
Was die eigentliche Sucherei angeht: Im Wesentlichen besteht der Trick darin, die Arbeit aus der Online- in die Indexing-Phase zu verlegen, damit der Besucher möglichst kurze Wartezeiten erleben darf.
Allgemein haben sich sortierte Bäume als Datenstruktur bewährt - ob Du so etwas selbst implementieren oder aus einer relationalen Datenbank als fertiges Modul übernehmen willst, das hängt von Randbedingungen Deiner Implementierung ab.
Allgemein würde ich sagen, daß Du mit SQL gut fährst - meine persönlichen Erfahrungen mit mySQL sind beispielsweise prima, auch wenn ich für eine bestimmte Suchmaschine den C-Quelltext der mySQL-Engine ändern mußte. Sofern Deine Aufgabenstellung keine exotischen Elemente enthält, wirst Du mit einer einfachen Datenbank, sehr einfachen SQL-Statements und einer beliebigen algorithmischen Sprache für Oberfläche und Indexer auskommen. Die Aufgabe "Suchmaschine" enthält alleine praktisch keine Einschränkungen für die verwendbaren Technologien.
- Welche Sprache sollte überhaupt verwendet werden
um das alles halbwegs vernünftig (und
zukunftsorientiert) aufzubauen?
Was ist "zukunftsorientiert"? Wenn Du von weniger als 5 Jahren redest, kannst Du nehmen, was Du willst - redest Du von mehr als 10 Jahren, dann halte ich beliebige Vorhersagen für nicht mehr sonderlich seriös. ;-)
Viele Grüße
Michael