Hi,
Was ist eine Indexerstellung?
im Kontext einer relationalen Datenbank verstehe ich darunter, einen Indexbaum über eine Menge von Spalten einer Tabelle aufzubauen.
Unter "Indexerstellung" stelle ich mir vor, dass ein
Index alle 10 minuten aktualisiert wird, um den
Server zu entlasten.
Ich finde, gerade ein solches Verhalten würde den Server in den meisten Fällen eher be- als entlasten.
Denn warum solltest Du alle 10 Minuten dasselbe tun, was im vorherigen Durchgang auch schon zum richtigen Ergebnis geführt hat?
Das hängt natürlich ein wenig von Deinen konkreten Daten ab. Aber in den meisten Fällen wirst Du relativ wenige Änderungen innerhalb Deines Datenvorrats haben - und in diesem Falle ist es günstiger, den Index inkrementell zu pflegen, d. h. während jeder INSERT-, UPDATE bzw. DELETE-Operation den entsprechenden Eintrag des Indexbaums gleich mit anzupassen.
Der Index enthält in meinem Falle die artikel für
eine Auktion. Es wäre sehr unnütz und performance-
lastig wenn für jeden User bei jedem klick die
Datenbank neu durchforstet werden würde und
unnötigen Traffic verursacht.
Das verstehe ich nicht. Der Sinn eines Indexbaums ist doch gerade, daß der Benutzer eben _nicht_ die _gesamte_ Datenbank durchforstet, sondern mit einer logarithmischen Anzahl von Zugriffen innerhalb des Indexbaums den richtigen Datensatz findet.
Alle 10 Minuten werden alle Artikel einmal in ein
Array geschrieben. Dieses Array wird sortiert
(wonach es sortiert wird ist nicht weiter
wichtig...) und dann werden Teile des Arrays
(nämlich die Artikel die auf die Kategorie sowie
Subkategorie zutreffen) in eine eigene Datei
geschrieben. Dann wird eine index.php erstellt,
die dann dementsprechend die Artikel der Kategorie
und Subkategorie included.
Der Array nützt Dir wenig, weil Du in ihm selbst keinen schnellen Zugriffspfad hast. (Es sei denn, Du implementiert auf diesem Array eine binäre Suche durch Halbierung des betrachteten Intervalls, simulierst also einen binären Baum mit diesem Array.)
Wenn Du den Array aber gleich durch einen (binären) Baum ersetzt, macht die Sache mehr Sinn - doch wie gesagt: Ein ständiger Neuaufbau ist wesentlich teurer als eine inkrementelle Änderung.
In diesem Falle werden für jede bedenkliche Art
eine statische html-Datei erstellt. Es gibt 3
sortierungsartung, also 6 (auf + absteigend)
verschiedene Indexe. Hier entfällt im gegensatz
zu der ersten Methode also die PHP-Rechenzeit.
Deine Aufgabenstellung eignet sich nicht für eine eigene Implementierung. Nimm eine beliebige relationale Datenbank und laß diese machen. mySQL reicht völlig - das wirst Du mit einer eigenen Realisierung nicht schlagen können, und es besteht die Gefahr, daß Deine Lösung um mehrere Zehnerpotenzen langsamer ist.
Es ist mir klar, dass die Unterschiede bei kleinen
Datensätzen gleich Null ist, aber wenn man 1 Mio.
Datensätze hat, könnte das wahrscheinlich schon
einen Unterschied machen....
Wenn Du eine Million Datensätze sortieren willst, dann brauchst Du dafür ungefähr 20 Millionen Vergleiche (n * log2(n)), aber innerhalb eines sortierten binären Indexbaums eben nur noch 20 Vergleiche zum Auffinden eines bestimmten Datensatzes.
Was für Methoden gibt es noch? Was haltet ihr von
meinen Methoden?
Du bewegst Dich auf einem Feld, in dem Du bei einer eigenen Implementierung mit 30+ Jahren Erfahrung der Programmierer von RDBMS konkurrieren müßtest.
Ich kann nur wiederholen: Mach es nicht - die wissen, was sie tun. Nutze lieber deren API. Gerade wenn Du eine Million Datensätze hast.
Viele Grüße
Michael
(der gerade eine Suchmaschine über eine Million News-Stories realisiert, mit einer mySQL-Datenbank)