Design einer Suchfunktion

Bis jetzt sind die geplantenten Systeme das einzige... Userzahlen oder so existieren noch nicht (wie gesagt, ist ne konzeptionelle Frage).

An eine Indexierung habe ich auch gedacht, allerdings im 1. Post nicht aufgeführt, da ich eine "formschöne" Lösung angedfacht hatte. In der Tabelle könnte ich dann natürlich auch die jeweilige URL abspeichern.

Was würde denn gegen diese Lösung sprechen, außer dass die Daten Doppelt abgelegt werden würden zwecks Indexierung?

@Gumbo: Dafür habe ich allerdings derzeit keine Daten.
 
Dafür habe ich allerdings derzeit keine Daten.
„Probieren geht über studieren“ lautet eine Volksweisheit. Wenn du keine Informationen darüber finden kannst, welche Methode und welche Feinheiten am effektivsten ist, musst du es selbst herausfinden.

Das einfachste wäre erst einmal eine UNION- oder UNION ALL-Abfrage (ich habe gelesen letztere sei schneller) gegen Einzelabfragen antreten zu lassen. Als Speicher-Tabellentyp solltest du MyISAM nutzen, da diese für Lesevorgänge besser geeignet ist.
 
Ich wollte eigentlich InnoDB verwenden - laut InnoBase ist das schneller als MyISAM (und es unterstützt Abhängigkeiten bei Beziehungen). Ich werde mal ein Testszenario aufbauen - mit MyISAM und InnoDB. Sowohl mit UNION, UNION ALL (wenn möglich) als auch mit der "Indexes" Tabelle. Das wird aber mindestens 2 Stunden dauern, bis ich die ganzen Daten gesammelt habe und es onlinegestellt habe. Denn diesen Test kann ich ja schlecht auf einer Entwicklungsmaschine mit XAMPP testen, sondern direkt auf meinem Webspace. Dann muss ich noch eine Tabelle mit Suchbegriffen erstellen, damit ich per klick auf einen Button eine neue Suchanfrage starte, ohne selber immer überlegen zu müssen. Hab da schon was gutes vor Augen :) Ich werd hier wieder rein schreiben, wenn mindestens ein Szenario steht!



Gruß Radhad
 
Das InnoDB schneller als MyIsam ist, ist eine pauschale Aussage.
Beide Engines sind sehr schnell und es gibt für beide Engines Szenarios, wo die Engine schneller ist.
Der Vorteil von InnoDB liegt darin, dass auf grund von Locking auf Zeilenebene viele Schreiboperationen parallel ausgeführt werden können, der Vorteil von MyIsam wiederum ist, dass sehr viele Leseoperationen gleichzeitig ausgeführt werden können.
Also wenn deine Engine eher leselastig als schreiblastig ist, dann ist MyIsam eindeutig die bessere Wahl.
 
Es wird mehr Lese-Operationen geben, aber ich will nicht auf die Abhängigkeit zwischen Fremd- und Primärschlüssel verzichten. Sollte allerdings ein großer Unterschied in der Dauer sein bei der Suche, werde ich wohl doch MyISAM nehmen müssen, um benutzerfreundlich zu bleiben.

Das wird sich aber dann herausstellen, wenn die Testumgebung fertig ist.
 
pauschal testen lässt sich das leider nicht, Unterschiede wirst du erst in VLDBs (Very Large Databases) erleben, die deutlich den Arbeitsspeicher übersteigen (>30GB).
MyIsam ist gedacht für Anwendungen die zu ~70% aus Leseprozessen bestehen, und da ist es dann über alle Datenbanksysteme das schnellste.
Wenn du auf referenzielle Integrität nicht verzichten kannst, bleibt natürlich nur InnoDB oder die BerkelyDB übrig, wobei ich eher zu InnoDB raten würde. Informiere dich aber unbedingt über die Unterschiede von MyIsam zu InnoDB, denn flickr hat am eigenen Leibe gespürt, dass die Unterschiede auf einmal zu einem großen Performance-Problem führen können, Stichpunkt: COUNT()
 
Ich habe noch nicht so viele Themen zu der Behandlung der Unterschiede gelesen, aber da du gerade flickr als Beispiel erwähnst, sollte ich das wirklich mal tun.

Also auf lange sicht gesehen dürften weniger Einträge vorhanden sein als hier bei tutorials.de - dafür aber mehr verteilt. Ich habe noch einen Hinweis zu SoundEx bekommen, welches die Suche unterstützen kann. Mein Ziel ist es, eine Suchfunktion zu entwickeln, die "ressourcenschonend" und wiederverwendbar ist.
 
soundex funktioniert nur wirklich gut mit englischen wörtern, ob es jemals auch für deutsche gedacht war, weiß ich gar net

Also wenn es dir um resourcenschonende Suche geht bleibt dir eigentlich doch nur MyIsam übrig, denn MyIsam besitzt den sogenannten Volltextindex, das ist ein Index der speziell für Suchoperationen in Texten entwickelt wurde und äußerst effizent wird, das MySQL-Manual wird dir da einiges dazu erzählen, ans Herz würde ich dir noch legen, eine deutsche stopp-Wortliste anzulegen, denn sonst wird er solche Bindewörter wie "und" etc mit in die Suche aufnehmen, da die mitgelieferte Stopp-Wort-Liste nur mit englischen Wörtern gefüllt ist
 
Also wenn es dir um resourcenschonende Suche geht bleibt dir eigentlich doch nur MyIsam übrig, denn MyIsam besitzt den sogenannten Volltextindex, das ist ein Index der speziell für Suchoperationen in Texten entwickelt wurde und äußerst effizent wird, das MySQL-Manual wird dir da einiges dazu erzählen, ans Herz würde ich dir noch legen, eine deutsche stopp-Wortliste anzulegen, denn sonst wird er solche Bindewörter wie "und" etc mit in die Suche aufnehmen, da die mitgelieferte Stopp-Wort-Liste nur mit englischen Wörtern gefüllt ist
Also vielleicht doch eine Tabelle als Index verwenden, wo alle Daten abgelegt werden und diese als MyISAM verwenden... Ich werde es auf jeden Fall mal durchtesten, danke :)
 
Zurück