关于一个缓存算法的改进

langzi8818 2008-03-05 11:50:12
问题背景:很多客户端同时请求获取同一块硬盘数据。当然问题的所在就是要提高获取到数据的速度。

现在的策略:
开辟一块大的内存,作为缓存,尽量减少IO的读取
方法:
1:定义两个变量,一个CMAP(哈稀表),list。LIST放未用的缓存块(一个缓存为512个字节).CMAP放置具有有用数据的缓存块.
2:当请求到来的时候,首先查CMAP,读取数据。如果没有读全,那么在直接读取IO,然后把读取的数据放到无用的缓存块中,插入到CMAP中。
3:如果缓存使用光,那么对CMAP排序,剔除一半使用次数少的缓存。


现在有没有好的缓存策略,提高速度??
如果方法好,另外在加100分
...全文
509 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qincp 2008-11-28
  • 打赏
  • 举报
回复
最高效的缓存算法是与应用匹配度高的算法,LRU比较适合随机访问,缓存和磁盘的容量比至少1%以上比较有效果;预读算法比较适合顺序访问。
如果应用场合比较明确,建议先研究应用访问规律,针对这个规律选择合适的算法。
langzi8818 2008-03-10
  • 打赏
  • 举报
回复
谢谢,我也在考虑方案
凤影 2008-03-08
  • 打赏
  • 举报
回复
要我说可以考虑采用已有的解决方案:如使用Mysql
joinnycoo 2008-03-08
  • 打赏
  • 举报
回复
我觉得你们的问题应该尽量少的对IO操作,这样我么可以使用磁盘调度算法来达到最优。
最近最少未使用算法(LRU)。把最近的访问量最少的数据一一用心数据替换。
langzi8818 2008-03-07
  • 打赏
  • 举报
回复
得,有浪费100分
langzi8818 2008-03-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oo 的回复:]
3:如果缓存使用光,那么对CMAP排序,剔除一半使用次数少的缓存。
===============================
排序很费时间的,一次就剔除一半是不是太多了
[/Quote]

不管剔除多少,都要排序的。
langzi8818 2008-03-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yaos 的回复:]
把数据映射为内存映射文件再做索引
[/Quote]

我只知道他当前要求从那个扇区读,读多少数据,至于下次读什么,就不知道了。

不知道这位兄台文件影射什么意思?磁盘可是上T的
GODProbe 2008-03-06
  • 打赏
  • 举报
回复
lru
langzi8818 2008-03-05
  • 打赏
  • 举报
回复
因为没个缓存块是512,所以如果读取的数据比较大(最大为65536),在查入缓存或者从缓存中读的过程,循环读的。(最多循环128次)
JYeung 2008-03-05
  • 打赏
  • 举报
回复
办法是有,说出来很麻烦,而且很多参数。
简单的说,如果对速度要求很高,可以参考CPU快取的做法,那是高手们千锤百炼的成果
oo 2008-03-05
  • 打赏
  • 举报
回复
3:如果缓存使用光,那么对CMAP排序,剔除一半使用次数少的缓存。
===============================
排序很费时间的,一次就剔除一半是不是太多了

yaos 2008-03-05
  • 打赏
  • 举报
回复
把数据映射为内存映射文件再做索引
langzi8818 2008-03-05
  • 打赏
  • 举报
回复
指出缺点者,给100。
langzi8818 2008-03-05
  • 打赏
  • 举报
回复
咋没人呢

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧