MySQL-Logs大记录量处理的相关问题汇总

发布于 2016-11-14 11:23:02 字数 871 浏览 1328 评论 2

表名: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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2017-11-09 19:53:17

回答你的第一个问题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"

灵芸 2017-04-25 20:48:47

Q4:可以考虑在晚上空闲时间,建一个定时任务,
查询昨天的活跃用户数据,插入到另一个表中

日期 用户 访问次数

比如 2012-02-26 00001 2
这样,统计日,周,月数据会方便很多

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文