2012-03-22 116 views
0

我有一个主要由javascript组成的网站。我在IIS上托管它。 本网站要求从硬盘上的特定文件夹中获取图像并将其显示给最终用户。 图像的请求非常频繁和快速。如何减少磁盘读写的开销?

有什么办法可以减少磁盘读取操作的开销吗?

我听说过内存映射,硬盘的一部分可以被映射,它将被用作主内存。 有人可以告诉我,如果我是错的或正确的,如果我是正确的是什么步骤来做到这一点。 如果我错了,有没有其他解决方案呢?

+0

它与[内存管理]无关。我已将其更改为[java]。如果你不批准回滚它。 – check123 2012-03-22 13:32:31

+0

你没有仔细阅读这个问题....我从来没有提到Java ..它的JavaScript ... – dhroove 2012-03-22 17:26:13

回答

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文章中。

+0

你可以分享一些链接或一些东西,这样我就可以得到实施这个帮助.. – dhroove 2012-03-22 05:34:01

+0

在讲座中回答。 ;)我会,一旦我退出。你的服务器端技术是什么? – check123 2012-03-22 08:38:56

+0

nopes ..我是软件开发人员..目前与性能问题战斗...在项目 – dhroove 2012-03-22 11:41:12

0

错误的方向。你想减少IO来减慢磁盘(相对)。你会希望将这些文件映射到物理内存中。在简单的情况下,操作系统将通过文件缓存自动处理这个问题。您可以看看Windows是否提供了任何可调参数,或者至少可以查看您可以收集的perf度量。

如果我没记错(几年前),IIS会非常高效地处理静态文件,因为链接到IIS的内核路由驱动程序,但只有当它不通过进一步的ISAPI过滤器等时才可以。您可能会找到一些与此相关的信息Channel9的等。

长期明智的,你应该看看静态资产转移到一个CDN如CloudFront的等等。

等等,虽然任何问题,你...你确定你有问题?

+0

文件缓存将无法正常工作..这些文件将图像将每天在该特定文件夹中更改..那为什么我正在寻找可以在日常基础上将这些文件添加到内存映射文件中的东西...... – dhroove 2012-03-22 11:39:58

+0

那好吧,操作系统管理文件缓存,当然缓存失效也是很自然的一部分。 – 2012-03-23 12:33:37