Es sollte kein Problem sein, diese Informationen in MySQL direkt zu speichern und zu aktualisieren. 3000 Treffer pro Stunde bedeuten weniger als eine Abfrage pro Sekunde. Die Verwendung der InnoDB-Speicher-Engine für diese Tabelle sollte Sperrprobleme beheben. Allerdings hat InnoDB viele Optionen und muss richtig konfiguriert werden, um effizient zu arbeiten - das ist wichtig.
Basierend auf Ihre Kommentare Ich denke, die Struktur, die Sie so etwas wie aussehen würde suchen:
id - page id
type - period length, could be 'day', 'week', 'month'
period - date when period starts, could be integer written as YYYYMMDD or YYYYMM
- depending on the contents of 'type' field
count - hit count for a url over given period
Der Primärschlüssel (type, period, id)
wäre. Auch Indizes auf (id, period)
und auf (type, period, count)
für effizient:
SELECT *
FROM ...
WHERE type='week'
and period = 20120409
ORDER BY count DESC
Wenn Seite wird mit Zählung für jede Periode Datensätze einfügen erstellt = 0. Wenn Seite einen Hit wird, führt ein einfaches Update:
UPDATE table
SET count = count + 1
WHERE id = $page_id
AND period IN (201204, 20120409)
Es würde alle drei Datensätze für die Statistiken "Tag", "Woche" und "Monat" aktualisieren.
Ich denke, Transaktionen können gut sein. – hjpotter92
Ist dies für analytische Zwecke? In diesem Fall sollten Sie einen kostenlosen Dienst wie Google Analytics oder Jetpack zum Tracking von Sichten verwenden. –
Soll ich den APC-Cache verwenden, um die Daten zuerst zu speichern und dann nach einigen Ansichten in die Datenbank zu aktualisieren ...? –