代码之家  ›  专栏  ›  技术社区  ›  Gublooo

Mysql数据库设计-捕获视频使用指标

  •  0
  • Gublooo  · 技术社区  · 7 年前

    表的简单版本是

    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个用户-这个数字只是成倍增长。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rick James diyism    7 年前

    做这项工作 INSERT SELECT . 这样,需要存储的数据就更少了,而且 SELECTs

    如果你想要的只是总的观察时间,那么只存储它。也就是说,当一个新记录进来时,增加现有记录 如果

    由于您需要每天和每小时的监视时间,因此无论何时是新的小时,都不要添加到现有记录中,而是开始一个新的记录。在极端情况下,这将使行数减少180倍(60分钟@20秒间隔)。对于“冲浪”,可能没有收缩。