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,就能達到很好的效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM