【问题标题】:How Reduce Disk read write overhead?如何减少磁盘读写开销?
【发布时间】:2012-03-22 04:57:46
【问题描述】:

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

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

我听说过内存映射,可以映射一部分硬盘并将其用作主内存。 有人可以告诉我我是对还是错,如果我是对的,那么执行此操作的步骤是什么。 如果我错了,还有其他解决方案吗?

【问题讨论】:

  • 它与 [内存管理] 无关。我已将其更改为 [java]。如果您不同意回滚。
  • 你没有仔细阅读这个问题......我从来没有提到过java ..它的javascript......

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


【解决方案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文章中阅读更多关于缓存算法的内容。

【讨论】:

  • 您能否分享一些链接或其他内容,以便我在实施此操作时获得帮助..
  • 在讲座中回答。 ;) 我会的,一旦我退出。你的服务器端技术是什么?
  • 不……我是软件开发人员……目前正在与性能问题作斗争……在其中一个项目中
  • waiting for ur ans.... 实际上更准确.. 我正在寻找一些解决方案.. 可以将特定文件夹中的所有文件添加到内存映射文件中,以便在服务器请求时对于该文件夹中的任何文件..可以快速访问..以最少的磁盘 io 读取操作
  • 我不知道你为什么说“不”。我假设您的服务器端技术是 Java,因为您的大多数标签都与它相关。
【解决方案2】:

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

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

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

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

【讨论】:

  • 文件缓存将不起作用,因为这些文件将在该特定文件夹中每天更改图像。这就是为什么我正在寻找可以将这些文件添加到内存映射文件中的东西每天...
  • 没关系,操作系统管理文件缓存,当然缓存失效是其中的一个自然部分。
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 2014-03-16
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
相关资源
最近更新 更多