11 回答
TA贡献1829条经验 获得超9个赞
还是定时任务算报表比较靠谱,这种需求,不该做成实时的,各种逻辑 (支付,退款,使用优惠券,使用积分)各种埋点,如果是这样太复杂,定时任务 报表统计比较稳当,当然如果业务简单,可以考虑vilay的思路,不过家在用户表里面感觉不合适,新建表吧
TA贡献1871条经验 获得超8个赞
这种比较推荐的就是以uid为维度建表,以后各种关于uid的统计数据都放到里面,产生消费就更新这个字段的数据,这种也不会产生效率问题,只是多更新一个字段而已。觉得用redis有序集合,挺方便,但是如果涉及到要把这些数据做列表并支持搜索之类的,那就还是要同步到mysql,就比较麻烦了。
TA贡献1712条经验 获得超3个赞
提供个思路:
1、每天固定一个时间点(比如半夜12点)查询用户消费记录,结果存入缓存(redis/memcached/文件缓存或其它)
2、用户每次消费时向用户消费记录缓存里加上消费金额
3、页面取出缓存数据展示
TA贡献1865条经验 获得超7个赞
select user_id,sum(cash) total_fee from orders
group by user_id
order by total_fee DESC
LIMIT 1;
效率应该不会很低把?想查前几名就limit几
TA贡献1982条经验 获得超2个赞
“实时“ “最高” ,通过这两点,我get到的信息是并不需要所有的排名,只需要取出排名靠前的展示出来,将这部分数据缓存。考虑到另一个关键点“实时”,楼主可以根据客户的平均消费额和消费频次,以及排名靠前的客户总额差额设计一个算法,比如我们仅取前10名的数据,最十名总消费额1万,当其他用户进行消费时,就与1万这个临界值进行比较。如果超过一万,则更新缓存。同时也监控前10人的消费情况,如果金额变动影响了排名则同时更新缓存
TA贡献1809条经验 获得超8个赞
先按照uid group by,然后再按照sum的值倒排
SELECT uid,SUM(price) AS total_price FROM table GROUP BY uid ORDER BY total_price DESC
- 11 回答
- 0 关注
- 589 浏览
添加回答
举报