2012-03-22 88 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