问答 / 0 / 9 / 创建于 2年前
比如统计当天每个小时的访客数,大家这种查询会怎么写。
先搞一个24小时每个小时开始和结束的时间戳数组
然后循环获取每个小时的访客数?
定时任务统计每小时的数据,当前小时数据动态查询
按每个小时分段记录,访问进来,判断处于哪个小时内,然后累加即可
一楼答案最优,另外补充如果计划任务终止,再加一些补偿重新生成,另外如果统计比较简单,不想用计划任务,可以使用mysql函数格式化时间为小时,然后分组,缺失的时间就是0,
select count(*) num, hour from xxx where xxx group by date_format(created_at, '%Y-%m-%d %H') hour
如果小时颗粒度统计数据还是很大,就再拆分,如果不是很大,直接先按小时进行统计,然后再按天维度统计,如果小时的统计异常,还能单独对某个小时的数据进行维护,确保数据没问题
select count(hour(addtime)), hour(addtime) from table group by hour(addtime);
学到了,我先收藏,调试一下,没这么用过
1、如果数据量特别较大,就采取闲时统计或者备份数据库统计,减少数据库压力 2、如果数据量小就直接楼上的mysql 分组查询 3、折中的,不大不小的,就在访客记录字段里面加上 year、month、day、hour,虽然多几个字段但是都是数据,还好啦,算是在2的基础上提高查询效率
如果要求不是很严格,可以用redis HyperLogLog实现,第二天再落库就行了
例子:
//连接Redis数据库 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //获取当前小时数 $hour = date('G'); //将访客IP地址导入HyperLogLog中 $redis->pfAdd('visitor:'.$hour, $_SERVER['REMOTE_ADDR']); //获取当前小时的访客数 $count = $redis->pfCount('visitor:'.$hour); echo '当前小时的访客数为:' . $count;
我要举报该,理由是:
定时任务统计每小时的数据,当前小时数据动态查询
按每个小时分段记录,访问进来,判断处于哪个小时内,然后累加即可
一楼答案最优,另外补充如果计划任务终止,再加一些补偿重新生成,另外如果统计比较简单,不想用计划任务,可以使用mysql函数格式化时间为小时,然后分组,缺失的时间就是0,
如果小时颗粒度统计数据还是很大,就再拆分,如果不是很大,直接先按小时进行统计,然后再按天维度统计,如果小时的统计异常,还能单独对某个小时的数据进行维护,确保数据没问题
学到了,我先收藏,调试一下,没这么用过
1、如果数据量特别较大,就采取闲时统计或者备份数据库统计,减少数据库压力 2、如果数据量小就直接楼上的mysql 分组查询 3、折中的,不大不小的,就在访客记录字段里面加上 year、month、day、hour,虽然多几个字段但是都是数据,还好啦,算是在2的基础上提高查询效率
如果要求不是很严格,可以用redis HyperLogLog实现,第二天再落库就行了
例子: