Разработка базы данных Mysql - захват метрик использования видео - PullRequest
0 голосов
/ 31 октября 2018

Я недавно получил это существующее приложение. Существует таблица базы данных 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 пользователях - число просто умножается.

Является ли этот подход даже правильным. Как мне это сделать?

1 Ответ

0 голосов
/ 01 ноября 2018

Выполните работу на INSERT вместо SELECT. Таким образом, требуется хранить гораздо меньше данных, а SELECTs намного быстрее.

Если все, что вам нужно, это совокупное время просмотра, то сохраняйте только это. То есть, когда приходит новая запись, увеличивайте существующую запись , если это было 20 секунд назад.

Поскольку требуется ежедневное и ежечасное время просмотра, всякий раз, когда наступает новый час, не добавляйте существующую запись, а начинайте новую запись. В крайнем случае это сократит количество строк в 180 раз (60 минут с 20-секундными интервалами). Для «серфинга» усадка может отсутствовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...