MySQL-Logs大记录量处理的相关问题汇总
表名:logs,用来保存用户访问的日志,用户的每一次访问都会如实记下
字段
id int(11) 自增长,主键
userid varchar(50) 用户ID,用户唯一标训
plat varchar(50) 软件平台
ver varchar(10) 产品版本号
times long 记录产生的时间, timestamp
数据如下:
id userid ver plat times
1 00001 1.0 1 ...
2 00002 1.0 2
3 00003 1.0 1
4 00001 1.1 1
5 00004 1.1 2
6 00003 1.1 1
7 00001 1.1 1
……
Q1:如果需要计算出有多少用户从1.0版本升级到1.1版本,请写出sql语句
Q2:当产品不断升级后,会存在越来越多的版本号,日志表会不断增长,而用户升级也未必是及时的。当该表记录超过500万条时,Q1中的SQL是否能继续适用?
Q3:如果每天都需要计算各版本升级信息,或指定时间段的该数据,请给出最合理的设计。
Q4:活跃度统计。对于在指定时间内访问次数超过2次以上的,则定义为活跃用户,如何最合理有效的统计日、周、月活跃用户(日记录百万级)。
Q5:随机策略。数据库中存在N条记录,当某用户U访问时,会随机找出10条用户阅读次数最少的记录返回给该用户。通过实际使用发现,仅有20%的用户会产生3次以上的访问,20%的用户一次也不会访问,30%的用户仅仅会访问一次。那么,在这种情况下,当N=100,U=100时,如何设计效率更高,当N=1万,U=100万时,又该如何设计。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
回答你的第一个问题Q1:
SELECT logs_0.userid FROM LOGS AS logs_0
LEFT JOIN LOGS AS logs_1 ON logs_0.userid=logs_1.userid
WHERE logs_0.ver="1.0" AND logs_1.ver="1.1"
Q4:可以考虑在晚上空闲时间,建一个定时任务,
查询昨天的活跃用户数据,插入到另一个表中
日期 用户 访问次数
比如 2012-02-26 00001 2
这样,统计日,周,月数据会方便很多