Hallo, ich habe eine riesige MySQL Tabelle, einen Besucherzähler. Der soll gecached werden. Wäre es eine einzige Seite, wäre das kein Thema, dann könnte ich alles in eine Textdatei schreiben, sie erzeugen und schauen, welches Datum neuer ist bzw. sie dann täglich aktualisieren, über den Tag wird dann die gechachete statische HTML Datei gezeigt. Doch so einfach ist das nicht: Ich habe eine dynamische Datei, wo man auf jeden Tag klicken kann. Jeder Tag ist dann oben in der URL Zeile eine andere Adresse und nun weiss ich nicht, wie ich das regle, denn wenn 2 leute gleichzeitig die Statistik anschauen, dann rasselt es nur so in der Datenbank. Hat einer einen Tipp?
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
Ja, gleich mehrere.
Wenn bei 2 Zugriffen die Datenbank schon in die Knie geht, dann ist irgendetwas fau am Datenbankdesign. Ich kenne MySQL-Installationen mit ein paar Millionen Datensätzern, die da kaum mit der Wimper zucken, selbs bei ein paar hundert Abfragen parallel. Wahrscheinlich habt ihr ein paar Indices vergessen, oder ihr macht schlechte Abfragen.
Tipp 1 wäre also, erst einmal die Datenbank unter die Lupe nehmen, denn das beste Script nutzt nix, wenn man in der Datenbank Mist gebaut hat.
Der nächste Tipp wäre: Da ja Tage die Angewohnheit haben zu enden und selten wieder zu kommen ist es die klassische Aufgabe für die generierung statischer Seiten für jeden Tag. Funktionieren kann sowas auf mehren Wegen, nehmen wir aber mal den einfachsten:
-
- Script wird aufgerufen mit dem gewünschten Datum als Parameter (Beispiel heute: 25. 04. 2005
- ).
- Script schaut im Cache-Ordner nach, ob Datei 20050425.html existiert
-
- Fall 1: Datei existiert, Datei wird ausgegeben, oder man macht einen Redirect
-
- Fall 2: Datei existiert nicht: Code zur Generierung wird eingebunden und ausgeführt, die Ausgabe wird in 20050425.html gespeichert und ausgegeben
-
Hmm, ich glaube fast, das wird verdammt viel Abfragematerial, wenn man bedenkt, dass der Tag 24 h hat und es 31 tage gibt, das macht dann 31*24 Dateien für allein einen einzigen Monat.
Da ich das Problem auch mal hatte, würde mich mal interessieren, was du unter guter Datenbankstruktur verstehst.
Beispiel:
Das hier wäre meine Datenbank mit der ich was ähnliches mal probieren wollte, ist aber dran gescheitert, weil ich zumindest es so aufgebaut hatte, dass jeder Tag auch einzeln abrufbar ist mit Uhrzeit. Dein Workflow hatte ich mal angewandt, wird nur verdammt viel Zeug, wenn man überlegt, dass man dann halt 744 HTML Dateien pro Monat hat, macht im jahr glatte 8929 (circa) Dateien allein an Statistiken und Auswertung ;-)
Laß mich raten, Du hast in dieser Datenbank Abfragen durchgeführt, bei denen in der WHERE-Klausel `datum`= 'Wert' vorkam...das ist kein gutes Datenbankdesign.
Grundsätzlich legt manüber jede Spalte einen Index nach der abgefragt oder verknüpft wird.
Wenn die Abfragen dynamisch sind, dann mach tim Übrigen statisches HTML meist auch kein Sinn, aber das war ja auch nicht die Fragestellung, es ging ja nicht um Einzelabfragen, die immer wieer anders gestellt werden, sondernnur um Afragen jeweils für einen Tag. Will man dan weiter filtern kann man das (wenn man unbedingt will) auch auf dem Client noch mit JavaScript machen. Es sind also nur im Schnitt 30 Dateien pro Monat, und wo bittist da das Problem?
Wie aber willst du das sonst regeln, wenn du beispielsweise beim Counter oder Besucherstatatstiken nach Datumsabfragen fragen musst ??
Ich verstehe deine Frage nicht. Wie soll ich was regeln?
Nunja, ich hätte gern gewusst, ich ich in meinem Falle dieses Problem verbessern kann.
ich habe das gefühl wenn ich die Abfragen direkt per SQL Eingabeaufforderung tätige in phpmyadmin beispielsweise, geht die abfrage wesentlich schneller als per PHP (vielleicht ist mein script auch nicht optimal geschrieben, da will ich aber jetzt erstmal nicht schrauben) ich will eigentlich wissen, was genau mit INDEX gemeint ist - ich habe ein PHP und ein MySQL Buch, die allerdings beide nicht wirklich auf INDEX in MySQL eingehen.
Das ist mir eher als Primärschlüssel (oder als eindeutige Zuweisung für eine Spalte) ein Begriff
Stell Dir ein Buch mit ein paar Tausend Seiten vor und Du suchst einen Absatz, in dem ein bestimmter Begriff vorkommt, was denkst Du wie lange Du brauchst?
Jetzt stell Dir das gleiche Buch und die gleiche Suche vor wenn am Ende des Buches ein Stichwortverzeichnis ist.