ChrisB: Cronjob o.ä. welcher auf APC zugreifen kann und Datenbank

Beitrag lesen

Hi,

Also wäre meine nächste Idee ein Cronjob welcher jede Sekunde einmal aufgerufen wird und die DB updatet.

Cronjobs bekommst du nicht in dieser zeitlichen „Auflösung“, Minimal-Interval ist eine Minute.

D.h. es gibt 2 Methoden. Entweder, in einer APC-Variable wird gespeichert wann das letzte update war per time(), jedes mal wird überprüft, "sind wir schon eine sekunde weiter? (time()>apc_fetch('lastupdate')), wenn ja, führe query aus. Das wäre aber eine Weitere Rechnung die bei jedem Query gemacht werden müsste und würde den Rechner wieder unnötig belasten.

Wenn du eine bestimmte Logik implementieren willst - dann wirst du das nicht hinbekommen, ohne den Rechner damit zu „belasten“, die Bedingungen deiner Logik auszuwerten.

Wenn dir das Speichern von Timestamps und vergleichen dieser zu aufwendig erscheint, musst du dir was anderes suchen.
Du könntest bspw. bei jedem Tausendsten Klick ein Update der DB machen - dazu braucht du nur den Zählerstand der APC-Variablen abfragen, und keinen zusätzlichen Wert (Timestamp) mitschleppen; das Verfahren hat aber natürlich seinen Nachteil, wenn die Tausend Klicks mal doch nicht in einer Sekunde stattfinden, sondern vielleicht auch mal fünf Minuten lang kein Nutzer klickt - Server-Crash zwischendurch, APC-Daten futsch.

Oder du gehst analog vor, wie PHPs Sessionhandler bei der Garbage Collection - machst den Start von entsprechenden Zufallswerten abhängig (die natürlich im Laufe der Zeit noch Feintuning erfahren können), und „würfelst“ damit bei jedem Request aus, ob in die DB gespeichert werden soll oder nicht. Ggf. auch nicht performanter, als die Timestamp-Geschichte.

Der Cronjob im 1-Minuten-Interval könnte als „Backup“ dienen. Wenn mit einem der obigen Verfahren eine ganze Minute lang nicht in DB gespeichert wurde, dann holt der Cronjob das auf jeden Fall nach. Ob du dabei noch irgendein Kriterium prüfst, oder auf jeden Fall Daten wegschreibst, wäre noch zu überlegen.

MfG ChrisB

--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]