Führe niemals pro Event ein UPDATE posts SET views = views + 1 auf einem heißen Post aus - diese eine Row wird zum Lock-Engpass. Inkrementiere in Redis, flushe im Batch in die DB alle paar Sekunden und lies den Zähler aus Redis. Die DB speichert langlebige Gesamtwerte, nicht den Live-Traffic.
Architektur
Client tap ─▶ API ─▶ Redis INCR views:{post} (live, source of truth for reads)
│ └── dedup: SADD seen:{post} {user/ip}
▼
every ~5s / N ops
Flusher ─▶ UPDATE posts SET views = views + delta (durable)
▲
read path: GET Redis (fallback DB on miss)
