Don't write each vote straight to a database row — buffer writes, shard the counters, and accept eventual tally. 5M votes in 10 minutes is ~8,300 votes/sec average, with spikes far higher (a live TV moment can 10x that). The trick is to turn a hot single-row update into many independent, parallel increments.
Client ─▶ Edge/API ─▶ Kafka (vote events) ─▶ Consumers ─┬─▶ Dedup store (SET one-vote)
(durable buffer) └─▶ Sharded counters (INCR N shards)
│
Redis/Aggregator ◀── periodic sum of shards ──────────────────────┘
│
└─▶ Read replica / CDN cache ─▶ Live tally to clients
