Hallo Ingo,
ich stimme Dir weitgehend zu, aber (wie Tom gerne zu Recht ausgeführt hat) mit kleinen Ablaufänderungen:
Ich würde folgendermaßen an di Sache herangehen:
Speicherformat csv:
Timestamp│Aufrufe│IP│Browserkennung
- Datei sperren
- Datei in ein Array einlesen
- Array sortieren (deshalb der Timestamp zuerst)
- Einträge < aktueller Timestamp - 1800 nicht mehr berücksichtigen
- Browserkennung und IP vergleichen
- wenn dieselbe IP oder dieselbe Browserkennung und eine mehr oder weniger ähnliche IP (bei AOL z.B. den letzten Block nicht berücksichtigen) Zähler erhöhen, sonst Neueintrag
- Datei sperren, neuschreiben und entsperren
- Datei neuschreiben und entsperren
Warum? Tom hat es gerne ausführlich erklärt. Ich zeige den möglichen Fehler in Deinem Szenario auf:
Anforderung von Client A
Datei wird eingelesen, Array wird sortiert (das kann dauern :-))
Anforderung von Client B
Datei wird eingelesen (gleicher Stand), Array wird sortiert (das kann dauern :-))
Datei wird gesperrt
Änderungen von Client A werden weggeschrieben
Datei wird entsperrt
Datei wird gesperrt
Änderungen von Client B an Originaldatei [sic!] werden weggeschrieben
Datei wird entsperrt
Änderungen von Client A sind weg.
Daher _vor_ dem Lesen die Datei sperren.
Freundliche Grüße
Vinzenz