亿级数量下的统计思路方案 (Redis + MySQL)

有一个需求,对于一个公司信息,可能包括许多关联表,例如公司业绩,公司人员,公司变更记录等等大概有二三十个,但是需要查询公司记录的时候将所有关联表的数量展现出来,类似于下图在这里插入图片描述
有一个需求,对于一个公司信息,可能包括许多关联表,例如公司业绩,公司人员,公司变更记录等等大概有二三十个,但是需要查询公司记录的时候将所有关联表的数量展现出来

  1. 直接count数据,这显然不行,在 MySQL 的count 接近于O(N)时间复杂度了,并且还是几十个表,所以这个方案直接 pass
  2. explain 命令查询近似值,但是在竞品的总值是精确的,所以也 pass
  3. 记录额外数据,动态维护
    在公司表增加字段,优点:查询方便,不需要额外再查找;缺点:表结构耦合度增加
    使用额外表记录数量,优点:降低耦合度;缺点:需要额外查一次
    使用 Redis 存储数量,优点:查询和维护都很快速;缺点:会浪费 Redis 宝贵的内存
  4. 最终方案:使用 Redis 缓存数据,设置过期时间,防止大量 Key 堆积;并定时持久化到数据库当中
    查询数量:Redis 查询,查询不到查 MySQL ,并缓存到Redis (这里MySQL不要 COUNT 数据表,因为许多根本不存在)
    维护数量:Redis 没有数据查 MySQL,MySQL 有数据自增,MySQL没有数据新增一个初始值1;Redis 有数据,直接自增1
    二次维护:二级列表查询详情会自带一个准确的数据,将这个数据赋值给 Redis。
    因为这个数据对于用户敏感度不是很高,所以使用 Redis,并且很好利用count()恢复数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值