既然操作系统层已经提供了page cache的功能,为什么还要在应用层加缓存?

知乎 · · 980 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

简单说,OS提供了一个通用的选择,没办法针对应用做个性化定制。

kafka基本是顺序读写,这点是OS缓存可以很好的处理的情况;但是对于更多应用层系统来说,存在数据热点分布不均的情况,这些OS就不能很好的处理了。

例如MySQL的innoDB缓存,如果采用OS的缓存策略,来一次全表扫描那么就可以让InnoDB辛辛苦苦热起来的数据冷了。

但是InnoDB自己维护缓存情况下,就可以处理得很好,例如MySQL的InnoDB会对缓冲数据拆分为young以及old数据;会在整个缓存空间中腾出3/8的数据来用缓存这种多次访问的热点数据;这样全表扫描情况下,至少大多数热点数据还在内存中。

甚至应用层可以在程序中直接指定热点数据,直接缓存起来;还有一个问题,OS缓存单位是页,不够应用层灵活。

MySQL :: MySQL 5.5 Reference Manual :: 8.9.1 The InnoDB Buffer Pool
980 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传