Cache 命中率

在数据库的设计中,cache是极其重要的一个模块

命中率高,延迟低的cache是承受高QPS,低延时的关键

其中,在热点key场景下,全局cache很容易造成锁瓶颈

于是,我们可以采用thread local + global的两级cache,应对热点key

针对thread local cache的大小应该设置多大来进行讨论

问题

  • 作为数据库的cache,采用 thread local + global 两级cache
  • thread local 应对热点key,global 作为普通cache (可以参考leveldb 的 cache)
  • 问:thread local 设置多大的效果较好?

解答

  • 两级cache定位不同,因此我们只 care 热点key 的命中率
  • 数学抽象
    • a 代表热点key,b 代表普通key
    • m 代表 a 的大小,n 代表 b 的大小
    • p 代表 a 的QPS,q 代表 b 的QPS
  • 理论答案
    • 若相邻 a 之间,b 的个数为 x ,x 的 99 分位数为 y
    • m + y * n 大小的cache,可以使命中率达到 99%
  • 特殊地
    • 若热key在所有key中均匀分布
    • 大于 (p * m + q * n) / p 的 cache,可以使命中率达到100%
    • 一般的,若热key占10 %,key大小一致为10B,在设置大于100B的cache,可达到100%
    • 由此可见,只考虑热点key的命中率,较小的cache,就能达到很好的效果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值