Я недавно получил это существующее приложение. Существует таблица базы данных mysql, которая используется для отслеживания времени, когда пользователь последний раз смотрел видео.
Упрощенная голая версия таблицы:
id -> Primary_key
user_id
video_id
last_watched_time
last_viewed_time (DateTime)
В столбце last_watched_time хранится время в секундах, с которого можно начать воспроизведение видео снова.
Как это делается, когда пользователь начинает воспроизведение видео, в таблицу вставляется новая запись (если запись для этого пользователя и видео не существует), а затем, когда пользователь смотрит видео, - каждые 20 секунд - для этой записи выполняется обновление для записи последнего просмотренного времени. Это так, если пользователь нажимает на следующее видео, не нажимая кнопку остановки, - мы знаем время, когда он остановился.
Таким образом, если пользователь просматривает новое видео в течение 1 минуты и закрывает браузер, столбец last_watched_time обновляется 3 раза 20,40,60. Последнее сохраненное значение равно 60. Поэтому, когда он возвращается - видео начинает воспроизводиться с отметки 1 мин.
id | user_id | video_id | last_watched_time | last_viewed_time
-------------------------------------------------------------------------
1 | 10 | 6 | 60 | 2018-10-01 10:10:10
Итак, это существующая таблица с оперативными данными.
Теперь они хотят начать измерять подробные показатели использования пользователей, такие как
- За последние 7 дней, сколько часов видео просмотрел пользователь, с разбивкой по дням
- За последние 6 часов, сколько часов видео просмотрел пользователь, с разбивкой по часам
Итак, моей первой мыслью было сделать следующее
- добавить еще один столбец с именем view_time в эту таблицу
- изменять каждые 20 секунд обновления для вставки операторов
Таким образом, для того же сценария, приведенного выше, данные в таблице будут
id | user_id | video_id | last_watched_time | view_time | last_viewed_time
-----------------------------------------------------------------------------------------
1 | 10 | 6 | 0 | 0 | 2018-10-01 13:10:10
2 | 10 | 6 | 20 | 20 | 2018-10-01 13:10:30
3 | 10 | 6 | 40 | 20 | 2018-10-01 13:10:50
4 | 10 | 6 | 60 | 20 | 2018-10-01 13:11:10
Теперь, если тот же пользователь возвращается через 2 часа, видео пересылается на 10 минут и смотрит в течение 25 секунд
5 | 10 | 6 | 660 | 600 | 2018-10-01 15:11:10
6 | 10 | 6 | 680 | 20 | 2018-10-01 15:11:30
При этом я все еще отслеживаю last_watched_time и, если им нужны дневные или часовые метрики, я могу группировать по дням или часам и суммировать view_time, чтобы узнать, сколько минут пользователь просмотрел в тот день или час.
Очевидная проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что, если пользователь смотрит видео в течение 4 часов (по 20-секундным операторам вставки для захвата last_watched_time), в эту таблицу будет вставлено приблизительно 720 строк. А если речь идет о 100 пользователях - число просто умножается.
Является ли этот подход даже правильным. Как мне это сделать?