如何减少磁盘读写开销?

时间:2012-03-22 04:57:47

标签: memory memcached memory-mapped-files memory-mapping

我有一个主要由javascript组成的网站。我在IIS上托管它。 该网站请求硬盘上特定文件夹中的图像,并将其显示给最终用户。 图像的要求非常频繁和快速。

有没有办法减少磁盘读取操作的开销?

我听说过内存映射,其中硬盘的一部分可以映射,它将用作主内存。 有人可以告诉我,如果我错了或是对的,如果我是对的,那么步骤是什么。 如果我错了,还有其他解决办法吗?

2 个答案:

答案 0 :(得分:1)

虽然内存映射是可行的想法,但我建议使用memcached。它作为一个独特的过程运行,允许水平扩展,并在一些最苛刻的网站上进行尝试和测试并进行主动部署。一个实现良好的memcached服务器可以reduce disk access显着。

它还具有许多语言的绑定,包括互联网上的语言。我假设您需要一个Java解决方案(您的大多数标签与该语言相关)。阅读this article以了解安装和其他管理任务。它还包含您可以开始使用的代码示例(适用于Java)。

在伪代码术语中,当你收到请求时,你需要做什么,比方说,Moon.jpeg是:

String key = md5_hash(Moon.jpeg); /* Or some other key generation mechanism */
IF key IN memcached
   SUPPLY FROM memcached /* No disk access */
ELSE
   READ Moon.jpeg FROM DISK
   STORE IN memcached ASSOCIATED WITH key
   SUPPLY
END

这是一个非常粗略的算法,您可以在this Wiki文章中阅读有关缓存算法的更多信息。

答案 1 :(得分:0)

错误的方向。您希望减少IO以减慢磁盘速度(相对)。您可能希望将文件映射到物理内存中。在简单的场景中,操作系统将使用文件缓存自动处理此问题。您可以查看Windows是否提供任何可调参数,或者至少查看可以收集的指标。

如果我没记错(多年前),由于内核路由驱动程序链接到IIS,IIS会非常有效地处理静态文件,但前提是它不会通过其他ISAPI过滤器等。您可以在Channel9上找到与此相关的一些信息等。

长期来看,您应该将静态资产移动到CDN,例如CloudFront等。

像任何问题一样......你确定你有问题吗?