Der Martin: Einfacher Counter performance touch()

Beitrag lesen

Moin,

wenn jemand beginnt PHP zu lernen, gehört oft am Anfang die Erstellung eines einfachen Counters dazu.

ach, ist das so?

=> Eine Datei => Zahl rein => Datei auslesen => Zahl++ => Datei mit neuer Zahl speichern

Und oft wird dann vergessen, auf die Stolperfallen hinzuweisen. Zum Beispiel den konkurrierenden Zugriff auf die Datei durch fast zeitgleich ablaufende Requests. Das mag bei kleinen privaten Sites mit einer Handvoll Zugriffen pro Tag noch keine Rolle spielen, zumal es da auch kein Beinbruch ist, wenn der Zählerwert falsch wird. Trotzdem sollte man sich der Problematik widmen.

Ich habe mir nun eine andere Methode überlegt und wüsste gerne, ob diese schlechter wäre, bzw. welche im Innenleben von PHP besser/schlechter verarbeitet wird?
=> Eine Datei Dateiname = 0.txt => Dir auslesen um Datei zu finden => Touch()Dateiname++ Also 1.txt, 2.txt, usw...

Insgesamt hast du eine Dateioperation weniger, nämlich das tatsächliche Lesen/Schreiben des Dateiinhalts. Eventuell könnte die Performance hier "a Muggasäckle"[*] besser sein als bei der zuerst beschriebenen Lösung. Aber spielt das eine Rolle?
Zumal deine alternative Methode nach und nach das Verzeichnis mit nutzlosen Dateien zumüllt, die man eigentlich auch irgendwann wieder entsorgen sollte - und schon ist der Vorteil "eine Dateioperation weniger" wieder dahin.
Die Problematik mit konkurrierenden Zugriffen besteht auch weiter.

Meine zweite Frage wäre: Gibt es noch andere Alternativen für diesen Zweck, als diese Beiden?

Das beste ist IMO immer noch, auf derartige Counter zu verzichten und für Statistiken die Log-Dateien zu verwenden, die der Webserver ohnehin führt. Das ist für den Server kein zusätzlicher Aufwand, und du bekommst eventuell noch wesentlich mehr Informationen.

Deutlich mehr Aufwand (aus Rechnersicht) ist, den Zähler in einer DB zu halten. Dort hast du dann auch den Vorteil, dass du dich um gleichzeitige Zugriffe nicht mehr kümmern musst; das kann die DB für dich sauber aufdröseln.

Schönen Sonntag noch,
 Martin

[*] "Muggasäckle": Schwäbisch-volkstümlicher Ausdruck für "ein ganz kleines bisschen"

--
They say hard work never killed anyone, but I figure, why take the risk?
  (Ronald Reagan, US-Präsident 1981-1989)
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(