客户登录网站,每次操作都会有记录,要计算客户的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
每条数据遍历,是不是效率很慢?还讨教大家帮忙查看下,怎么样处理,非常感谢!
访次:【客户按照客户端分组,操作网站时间超过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语句来统计要快,毕竟只要一次循环。
from 表结构如下
order by 客户ID,客户端,optime
然后遍历,这样处理是最快的。比直接SQL语句来统计要快,毕竟只要一次循环。
20
还是用程序处理吧:
1. 增加另外一张表和一个缓存层(可以是redis,也可以是服务器内存)。
2. 数据入库的时候,把访问时间存入缓存,用户下次访问的时候,先在缓存中查询上次的访问时间,假如访问时间小于半小时,则此次访问不插入数据库,假如访问时间超过半小时,则更新缓存中的数据,并插入数据库
3. 最后统计的时候,从这张表直接统计就会非常简单
新增一张表的原因是这张表只记录超过半小时的访问记录,并不是真实访问量,不利于统计真实访问量
1. 增加另外一张表和一个缓存层(可以是redis,也可以是服务器内存)。
2. 数据入库的时候,把访问时间存入缓存,用户下次访问的时候,先在缓存中查询上次的访问时间,假如访问时间小于半小时,则此次访问不插入数据库,假如访问时间超过半小时,则更新缓存中的数据,并插入数据库
3. 最后统计的时候,从这张表直接统计就会非常简单
新增一张表的原因是这张表只记录超过半小时的访问记录,并不是真实访问量,不利于统计真实访问量
10
看你需要的是随时更新的动态统计,还是一天一次的静态统计。
假如是动态的,就用基于内存的kv store,楼上说的Redis、memcached都不错,每次更新的时候检查是不是相隔半个小时以上,是的话计数器加一。
假如是静态的,就用三楼说的程序,顺着扫一遍计数很快。
假如是动态的,就用基于内存的kv store,楼上说的Redis、memcached都不错,每次更新的时候检查是不是相隔半个小时以上,是的话计数器加一。
假如是静态的,就用三楼说的程序,顺着扫一遍计数很快。