Вот очень простое решение.Это не совсем оптимально, но может быть улучшено, чтобы стать лучше без особого горя.
По сути, просто разделите время на интервалы, скажем, по 5 минут каждый.Имейте запись в db с одним столбцом для videoID, и одним столбцом, идентифицирующим определенный интервал времени, и затем один столбец для того, сколько просмотров видео получило за тот интервал времени.Затем, если вы хотите узнать, сколько просмотров видео было получено за последний день, просто суммируйте все те, где интервал / отметка времени больше, чем день назад.Это не совсем оптимально, потому что последний интервал будет только частично заполнен представлениями, что дает вам представления на некоторое дополнительное время или немного меньшее время в зависимости от того, когда вы его вычисляете.Но этого достаточно для решения, которое занимает две секунды.Чтобы рассчитать годовые просмотры, сделайте то же самое, за исключением полностью отдельной таблицы, где временные интервалы составляют, скажем, 1 день, чтобы вам не приходилось хранить данные и суммировать более 100 000 пятиминутных интервалов, чтобы получить полный год.
Просто убедитесь, что в [videoId, timestamp] есть составной индекс, чтобы вы могли быстро суммировать просмотры.