按关键词阅读:
简单说,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
■网友
题主所说的缓存 都是操作系统或软件服务在不能得知业务的情况下默认做的优化根据目标数据的热度来决定放在内存中还是放入外存(比如LRU)page cache是假定开发者的io操作是顺序读 不是随机读 所以替开发者做了预判(再者读取单位是页啊.. 有个设计原因 在这里不解释了 类似行式存储和列式存储 很多事情是结合场景来做选择的 没人说默认的方式就很好啊)没有人说不能直接操数据库 可是那一次请求 走了很多实际不需要走的逻辑啊 通过降级功能 用更简单的方式实现缓存借此提升性能、节约资源 Kafka也是一样 假设你要是用Kafka玩消息事务 那不是脑袋有病么..结合需求 莫要惊慌
■网友
因为大多数情况下,我们都是用索引来寻址,而不是内存地址来寻址的。这样就可以利用缓存来索引硬盘上的东西。而操作系统支持的那点不能query的虚拟内存简直不能用。
当然了,更重要的是query,不是大小。
■网友
Page cache针对文件系统,但是应用层的缓存大多缓存的是中间结果,是经过计算或者裁剪组合后的。
■网友
【既然操作系统层已经提供了page cache的功能,为啥还要在应用层加缓存】 跟pagecache地址不够用,大小不够用没有关系,索引查找到的是虚拟地址或者是queue data都可以,根据虚拟地址读pagecache缓存或者没有找到物理地址去读磁盘,再更新页表和更新pagecache,这是一个pagecache缓存查询的正常流程。
重点是这样的非聚集缓存(索引存在用户内存,数据在pagecache上)去读它时会发起系统调用,引起用户态到内核态转化。
而且pagecache只能以虚拟地址构建索引,无法利用业务逻辑建立起k-v缓存,还随时有可能被被覆盖和被pdflush脏页回写
■网友
Cassandra就推薦優先使用Linux系統自帶的Page Cache,並要求JVM Heap不能超過1/4總物理內存大小。而應用層緩存例如Java Offheap Buffers默認是JVM Heap的1/4,也是為了給系統Page Cache留夠free pages。
例如32GB內存機器,JVM Heap 8GB, Java Offheap Buffer 2GB,剩下20GB全部是page cache,增大JVM Heap反而會導致Cassandra性能下降。
Java Offheap Buffer比page cache更靈活,更適合Java objects,page cache最小4KB,適合文件系統,所以有2GB的Java應用層緩存也是必要的。
■网友
基于硬件及网络上的数据的传输、处理、存储对时间足够敏感,且有分层或分散处理的需求,那么缓存就是必要的。这简直就是IT系统设计的方法论之一。
■网友
不同级别的cache作用是不一样的,操作系统级别的cache主要是为操作系统层提供服务的,使操作系统更高效地工作,cpu级别的缓存是为让运算更高效地执行,应用层的缓存是为了让应用更高效的运行.举个列子,HBase的L1 Cache只保存index级别的block,也就是只保存索引数据,而不是把全部数据都保存下来,这里的需求是只需要保存索引数据就能让应用更高效的运行,而这种场景下操作系统级别的缓存就不太适用了(因为索引数据和原始数据在同一文件,以及对索引的粒度需求不匹配HBase场景).当然如果的索引在一个文件里面,保存这个文件实际就能保存索引,这种情况就可以利用操作系统的缓存了,ElasticSearch就是这样做的.不同的场景下有不同的需求,不同的需求就会产生不同的Cache,举个列子:使用HBase scan数据首先会走HBase的客户端Cache,然后走HBase服务端的L1 Cache,然后走HDFS的客户端Cache,然后走HDFS的服务端块Cache(默认是没有打开的),然后是操作系统的Page Cache
来源:(未知)
【】网址:http://www.shadafang.com/c/gx032b5C002020.html
标题:既然操作系统层已经提供了page cache的功能,为啥还要在应用层加缓存