phpbar.de logo

Mailinglisten-Archive

[php][OT] Suchmaschienenoptimierung

[php][OT] Suchmaschienenoptimierung

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Aug 31 12:51:12 CEST 2004


Hallo Andreas,

Andreas Müller schrieb:
> Am So, den 22.08.2004 schrieb Lutz Zetzsche um 8:15:

[...]

>> Die
>> Live-Version wird komplett statisch aus der Datenbank generiert, selbst
>> die Suche greift bei der Ergebnisaufgabe auf vorgenerierte
>> Codeschnipsel zurueck. Nur der eigentliche und erste Suchvorgang ist
>> dynamisch, so dass die erste Suchergebnisseite in der Regel in einer
>> Zeit unter 0,25 Sekunden ausgeliefert wird, die Folgeseiten noch
>> schneller, weil das fertige Suchergebnis, dass heisst die gefundenen
>> IDs, dann aus der Session geholt wird.
>>
> Das ist sicherlich ein guter Ansatz allerdings würde ich mir da ein
> wenig Sorgen um den Speicherverbrauch machen, aber etwas in der Art
> hatte ich mir auch schon überlegt.
> Nur sehe ich da dann noch so das kleine Problem das wenn du dynamisch
> aus der DB die Daten suchst kannst du entweder a) die Daten in neuen
> Templates hinterlegen oder b) muss in der DB auf die jeweilige URI
> verlinken, was evtl nicht ganz sauber ist, da dann bei Änderungen
> innerhalb der Webstruktur die halbe DB auf den Kopf stellen musst. Ein
> kleiner Cronjob der regelmässig die Konzistenz der Website mit der DB
> vergleicht sollte da aber abhilfe schaffen? Oder wie hast du das Problem
> gelöst?

Ich habe die Daten in der Datenbank vollstaendig normalisiert abgelegt und
greife ueber Skripte mittels Klassen objektorientiert auf die Daten zu.
Damit ist das System sehr flexibel, sehr gut erweiterbar und pflegbar.

Fuer eine Suche sind diese Strukturen natuerlich nicht optimal, so dass
ich fuer die Live-Suche eine flache Tabelle in der Datenbank habe, die ich
nach Aenderungen aus den Daten per Skript neu fuelle. Pro Link bzw. Bild
gibt es einen Datensatz in der Tabelle, identifiziert durch die
Bezeichnung des Elements, Link bzw. Bild, und die ID des Elements in der
Datenbank.

Bei der Suche werden also die Daten in der flachen Tabelle durchsucht,
zurueckgeliefert werden aber nur die gefundenen Primaerschluessel,
Element-Typ + Element-ID. So bleibt auch die zurueckgelieferte Datenmenge
gering.

Mit den zurueckgelieferten Angaben werden dann die passenden
Code-Schnipsel im Suchergebnis gezogen, die ich auch nach Aenderungen neu
generiere. Die Code-Schnipsel sind so abgelegt:

.../texte/bilder/ids_0001-0100/id_0001/de.html etc.
.../texte/links/ids_0001-0100/id_0001/de.html etc.

D.h. beispielsweise bei Element-Typ "Bild", Element-ID 1:

Der Element-Typ "Bild" wird in das Verzeichnis ".../texte/bilder"
umgesetzt, die Element-ID 1 wird dem Verzeichnis "ids_0001-0100/id_0001"
zugeordnet und dort wird dann der Code-Schnipsel in Deutsch gezogen. Die
Sprache hole ich zur Laufzeit aus der PHP-Seite.

Die Ausgabeseite fuer die Suchergebnisse muss also nur die Logik kennen,
wie der Primaerschluessel eines gefundenen Datensatzes in die passende URL
des Code-Schnipsels umgewandelt wird.

Hinsichtlich der Datenkonsistenz muss nur beachtet werden:

Wenn Daten geaendert werden, muessen die betreffenden Seiten der Website
(neu) generiert werden, muss die Datenbank-Tabelle Suche neu befuellt
werden und muessen die zugehoerigen Code-Schnipsel generiert werden.

Alle drei Vorgaenge habe ich in einem Generierungsskript gekoppelt. Damit
ist die Datenkonsistenz gewaehrleistet. :-)


> Wenn du magst können wir uns ja mal private darüber mailen?

Gerne. :-)


Viele Gruesse

Lutz


php::bar PHP Wiki   -   Listenarchive