Suchmaschine: Dateien oder Datenbank?
Stephan Huber
Hi,
ich würde gerne wissen, ob bei einer großen Anzahl von indizierten Dateien
die Suche durch die Dateien mit einem Skript schneller sein kann als die
Abfrage eines SQL-Servers. Hintergrund: wenn ich eine Indexdatei erstelle (entweder
als File oder als Datenbanktabelle), die eine ID für die URL, das Schluesselwort
und die Relevanz erhaelt, dann bekomme ich bei Abfragen, in denen die
Woerter mit "und" verknüpft sind, bei SQL ein Geschwindigkeitsproblem,
da ich die Indextabelle mit "JOIN" mit sich selbst verbinden muß.
Solange die Anzahl der Treffer für jedes Schlüsselwort relativ klein ist, geht
das, aber wenn zwei Woerter verknuepft werden, bei denen die Trefferanzahl sehr
groß ist (in meinem Test: >250 bei einer Indexgroesse von 200000 Zeilen), dann
wird das ganze recht langsam (ca. 30s).
Nun scheint dieses Problem mit UND-Abfragen nicht zu entstehen, wenn ich
ein Skript haette, dass die Indexdatei durchsucht, weil sich das Skript im
Gegensatz zu einem SQL-Server merken kann, daß eine der letzten
durchsuchten Reihen auch schon zur gleichen URL gehoerte, und das
erste Schlüsselwort enthalten hat. Die Frage ist, ob das schneller sein kann,
oder ob der Vorteil nicht wieder verlorengeht, wenn ich dann im Skript die
gefundenen Dateien nach Relevanz sortieren muß.
Gruesse
Stephan
Hallo Stephan,
ich würde gerne wissen, ob bei einer großen Anzahl von indizierten Dateien die Suche durch die Dateien mit einem Skript schneller sein kann als die Abfrage eines SQL-Servers.
Generell wuerde ich mal sagen: Suchen in einer einzigen Datei (und sei sie noch so gross) ist bei heutigen EDV-Systemen, die aufgrund ihrer Unzulaenglichkeit zwischen Festplattenspeicher und Arbeitsspeicher unterscheiden muessen, schneller als Suchen ueber viele Dateien, die alle nacheinander geoeffnet, ausgelesen und wieder geschlossen werden muessen.
Ob die Daten in einer perfekt indexierten teuren Datenbank lagern oder in einer einfachen Textdatei mit Begrenzerzeichenkonventionen, haengt von der Groessenordnung ab.
Vor ein paar Jahren war es undenkbar, eine 1MB grosse Textdatei einfach komplett in den Arbeitsspeicher einzulesen. Heute ist das auf einen ordentlichen Server-Rechner auch bei Textdateien von 10 oder 20MB kein Thema mehr. Und in 10 oder 20MB gehen schon etliche mittlere Datenbanken rein.
Meine derzeitige Einschaetzung deshalb:
bis sagen wir mal ca. 10 MB alle Daten durch ein einfaches Organisationsprinzip ("komma-delimited" oder dergleichen) in eine grosse Textdatei packen. Bei groesseren Datenbestaenden eine richtige Datenbank mit Indexierung und Speicherverwaltung verwenden.
Aber niemals (oder nur bei sehr kleinen Datenbestaenden) durch eine Online-Abfrage, etwa durch CGI, die Suche ueber etliche (will meinen: hunderte oder gar tausende) Einzeldateien starten!
viele Gruesse
Stefan Muenz