API и bucket sizes для CTR dashboard
Dashboard должен показывать CTR за минуты, 5 минут и часы. Как спроектировать API и хранение bucket-агрегатов?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
API читает агрегаты по campaign_id, диапазону времени и bucket size. Лучше хранить clicks/impressions и пересчитывать CTR, а не только ratio.
Полный разбор
Запрос обычно выглядит как campaign_id + from/to + granularity. Для свежих данных можно отдавать minute buckets, для истории - 5m/hour/day rollups. Rollups можно считать заранее или on read, если объем позволяет.
Незакрытые окна нужно явно помечать или обновлять upsert-ом, иначе график будет прыгать и вводить пользователя в заблуждение. При агрегации нельзя усреднять CTR по окнам напрямую: нужно суммировать clicks и impressions, а потом делить.