Code Bye

MYSQL两次点击网站时间超过30分钟,算新一的访次

客户登录网站,每次操作都会有记录,要计算客户的pc端和移动端每天访次数,讨教大家怎么样处理更方便!
访次:【客户按照客户端分组,操作网站时间超过30分钟,算一新的访次】。
每天的数据记录大致40万条数据。

表结构如下:
操作时间                                           客户端                          客户ID                                    客户点击标识
optime【date】                                 dcsid                             cusid                                        flag

2016-04-23 08:12:25                         pc端                              001                                           1
2016-04-23 08:12:26                         pc端                              001                                           1
2016-04-23 08:12:30                         pc端                              001                                           1
2016-04-23 08:15:30                         移动端                           001                                           1
2016-04-23 09:10:20                         pc端                              001                                           1
2016-04-23 08:12:25                         pc端                              002                                           1
2016-04-23 08:12:26                         pc端                              002                                           1
2016-04-23 08:12:30                         pc端                              002                                           1
2016-04-23 09:10:20                         pc端                              002                                           1
2016-04-23 11:12:30                         pc端                              003                                           1
2016-04-23 11:20:40                         移动端                           003                                           1
2016-04-23 12:20:40                         移动端                           003                                           1
想得到的记录为
统计时间                   客户端            客户id              访次
2016-04-23               pc端                 001                  2
2016-04-23               移动端              001                  1
2016-04-23               pc端                 002                  2
2016-04-23               pc端                 003                  1
2016-04-23              移动端               003                  2
每条数据遍历,是不是效率很慢?还讨教大家帮忙查看下,怎么样处理,非常感谢!
解决方案

10

select *
from 表结构如下
order by 客户ID,客户端,optime
然后遍历,这样处理是最快的。比直接SQL语句来统计要快,毕竟只要一次循环。

20

还是用程序处理吧:
1. 增加另外一张表和一个缓存层(可以是redis,也可以是服务器内存)。
2. 数据入库的时候,把访问时间存入缓存,用户下次访问的时候,先在缓存中查询上次的访问时间,假如访问时间小于半小时,则此次访问不插入数据库,假如访问时间超过半小时,则更新缓存中的数据,并插入数据库
3. 最后统计的时候,从这张表直接统计就会非常简单
新增一张表的原因是这张表只记录超过半小时的访问记录,并不是真实访问量,不利于统计真实访问量

10

看你需要的是随时更新的动态统计,还是一天一次的静态统计。
假如是动态的,就用基于内存的kv store,楼上说的Redis、memcached都不错,每次更新的时候检查是不是相隔半个小时以上,是的话计数器加一。
假如是静态的,就用三楼说的程序,顺着扫一遍计数很快。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MYSQL两次点击网站时间超过30分钟,算新一的访次