У меня была похожая проблема с отслеживанием количества просмотров рекламодателей на моем сайте. Первоначально я вставлял новую строку для каждого представления, и, как вы предсказываете, это быстро привело к тому, что таблица стала неоправданно большой (до такой степени, что это действительно вызывало проблемы с производительностью, что в конечном итоге привело к тому, что моя хостинговая компания закрыла сайт для несколько часов, пока я не решу проблему).
Решение, с которым я столкнулся, аналогично вашему решению №3. Вместо вставки новой записи при появлении нового представления я обновляю существующую запись для рассматриваемого периода. В моем случае я пошел с ежедневными записями для каждого объявления. какой период времени использовать для вашего приложения, будет полностью зависеть от особенностей ваших данных и ваших потребностей.
Если вам не нужно специально отслеживать каждое вхождение за последний час, возможно, вы переусердствовали, чтобы даже сохранить их и объединить позже. Вместо того, чтобы выполнять задачу cron для выполнения регулярного агрегирования, вы можете просто проверить запись с совпадающими спецификациями. Если вы найдете его, то вместо вставки новой строки вы обновите поле счетчика соответствующей строки.