表的简单版本是
id -> Primary_key
user_id
video_id
last_watched_time
last_viewed_time (DateTime)
方法是,当用户开始播放视频时,在表中插入一个新的记录(如果该用户的记录和视频不存在),然后当用户观看视频时(每20秒一次),对该记录进行更新,以捕获上次观看的时间。这是这样的,如果用户点击下一个视频没有按下停止按钮-我们知道他停止的时间。
因此,如果用户观看一段新视频1分钟并关闭浏览器,则“最后观看的时间”列将更新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
现在他们想开始衡量用户使用的详细指标,比如
所以我的第一个想法是
-将另一个名为view_time的列添加到此表中
因此,对于上面的相同场景,表中的数据将是
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
5 | 10 | 6 | 660 | 600 | 2018-10-01 15:11:10
6 | 10 | 6 | 680 | 20 | 2018-10-01 15:11:30
有了这个功能,我仍然在跟踪上一次观看的时间,如果他们想要每日或每小时的指标,我可以按天或小时分组,并汇总视图时间,以知道用户当天或小时观看了多少分钟。
我发现这种方法的一个明显问题是,如果用户观看4小时的视频(通过20秒的insert语句来捕获最后一次观看的时间),大约720行将被插入到这个表中。如果我们说的是100个用户-这个数字只是成倍增长。