am 14. Januar 2009
Im Leben eines PHP Entwicklers kommt man häufig an den Punkt, dass man eine Aktion in regulären Abständen ausführen muss. Sei es das Aufräumen der Datenbank per Skript oder das leeren eines bestimmten Verzeichnisses. Jedem von euch werden hier bestimmt noch einige Beispiele einfallen. Der Königsweg dies zu lösen ist natürlich ein Cronjob, den man einrichtet und der bestimmte Skripte zu einer bestimmten Uhrzeit ausführt. Was aber tun, wenn keine Cronjobs zur Verfügung hat, da man nur einen „normalen“ Webspace besitzt. Ja es soll Leute geben, die keinen eigenen Server besitzen.
Nehmen wir also an, wir wollen bei jedem tausendsten Aufruf einer Webseite etwas spezielles tun. Jetzt können wir uns einfach einen Counter definieren, den wir in der Datenbank speichern und bei jedem Aufruf der Seite um Eins nach oben zählen. Dies wären zwei Datenbankzugriffe pro Seitenaufruf. Einer zum Lesen und einer zum Schreiben. Klingt relativ viel, dafür dass wir einfach nur eine Zahl hochzählen wollen.
Wenn man genau bei jedem 1.000sten Mal die Aktion ausführen muss, dann wird einem nichts anderes übrig bleiben, aber in den meisten Fällen genügt es auch, dass es ungefähr 1000 Aufrufe sind. Ob es jetzt 950 oder 1050 sind spielt meistens keine Rolle. Wenn dies so ist, dann sollte man einfach eine Zufallszahl zu Rate ziehen.
if ( rand(1,1000) == 500 ) {
doAction( );
}
Dieser Code verschwendet keine Datenbankzugriffe und liegt auch so ganz gut in Performance Dingen. Problem also gelöst. Das geht natürlich nur wenn der verwendete Zufallsgenerator auch gut ist und gleichmäßig seine Zahlen verteilt, aber davon gehen wir hier mal aus.