数据统计刷新越来越慢

我现统计的数据在是定时的更新到一个统计表里面去,也可以通过手动刷新。手动刷新,是for循环进行统计,然后更新统计,因为用户越来越多,我想用队列来进行实现刷新,但是这样刷新的话,不知道哪时候能刷新好,没有及时的反馈,大佬们是咋弄的

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11

延迟一天,每天凌晨更新

2周前 评论
中文 (楼主) 2周前

刷新啥玩意?一脸懵

2周前 评论
小猪蹄子 (作者) 2周前
中文 (楼主) 2周前
小猪蹄子 (作者) 2周前
中文 (楼主) 2周前

最近有遇到过类似的问题。

  1. 我们用 mongodb 做数据临存
  2. 定时汇总数据到mongodb
  3. 同步至mysql时异步通知 清空mongodb 里不需要在统计的 相关数据.
2周前 评论

个人意见如下:

  1. 异步刷新,比如定时任务。
  2. 提前缓存数据,比如统计用户数,每注册一个Redis就incr一次,不需要保证事务redis一定写成功,定时任务定期去查询用户总数同步到redis避免差异值过大,查询时直接读取redis就可以知道用户总数,这样实现难度低,工作量少,类似的统计任务业务允许的情况下均可以如此实现。
  3. 查询时间交岔开,比如你要统计A表数量,又要统计B表等N多聚合查询,数据库瞬间压力大,可以分开交叉查询,比如A表30秒更新一次统计,B表50秒更新一次统计,不要把聚合查询这种高消耗的SQL连续使用。
  4. 从库查询,Mysql有主从的情况下,可以单独分配一台从库供后台等业务使用,统计查询可以走这里,避免执行高消耗任务时影响用户端。

如果是每个用户都不一样的用户段统计数据的话就要具体情况具体分析了

1周前 评论

设置一个系统刷新时间间隔的阈值(保存一个带超时的redis key),用户请求刷新先看看存不存在key,存在的话就跳过刷新,直接返回数据,不存在就执行刷新,缓存key,定时执行刷新的任务也要查询key,不存在才执行刷新。
用户端最好显示最后更新时间,把刷新时间暴露给用户,用户决定要不要刷新,也解决用户需要反馈的问题。

1周前 评论

可以考虑换clickhouse

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!