2010-06-30 145 views
19

我不認爲這很清楚,從文件或memcached中讀取文件是否更快?爲什麼?對於緩存,文件系統或Memcached,哪個更快/更好?

+0

你將不得不得到更具體的,你有什麼數據集和訪問模式,這是一個本地memchaced服務器或distibuted?網絡訪問成本是多少?您存儲的信息有多大?你在運行什麼磁盤? – 2010-06-30 09:46:44

+0

像這樣的問題更適合http://superuser.com/ – 2010-06-30 09:49:47

+0

我對這些細節不太瞭解,我想用基本的術語來解釋:簡單設置,簡單應用程序,1個memcache服務器,100個文件... – 2010-06-30 09:49:53

回答

23

Memcached速度更快,但內存有限。硬盤很大,但相比內存,I/O速度較慢。你應該把最熱門的東西寫到memcached所有其他的可以去來緩存文件
(或人爲起來,投入一定的資金投入更多的內存一樣these guys :)

對於一些基準看到:Cache Performance Comparison (File, Memcached, Query Cache, APC)

從理論上講:

Read 1 MB sequentially from memory       250,000 ns 
Disk seek        10,000,000 ns 

http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf

+5

您鏈接的基準測試結果與您的聲明完全相反 - Memcached比從本地磁盤讀取要慢。你能澄清這些差異嗎? – DOOManiac 2016-04-28 14:17:51

0

你正在對細節進行大膽的評估。我相信你所尋找的答案取決於情況。據我所知,很少有事情總是比其他事情更好。

顯然,讀取文件系統的東西(假設它是硬盤驅動器)會更快。即使是SDD也會比內存讀取慢得多。其原因在於HDD/FileSystem是爲容量而不是速度而構建的,而DDR內存則因此而特別快速。

良好的緩存意味着將頻繁訪問的部分保留在內存中,並且磁盤上不常訪問的東西(持久存儲)。這樣,正常情況下,你的緩存實現將大大改善。這是你的目標。確保您對理想的緩存策略有很好的理解。這將需要大量的基準測試和測試。

11

有相當幾個不同的方面,可能會有利於一個或另一個:

  • 您是否需要/想要在多個服務器之間共享此數據?文件系統是本地的,memcached通過網絡訪問。
  • 你的緩存項目有多大?文件系統可能對大型對象更好。
  • 每頁有多少個memcached請求? TCP連接和拆卸可能需要比本地機器上的簡單文件系統stat()更多的時間。

我建議你看看你的用例,並對這兩種方法做一些分析。如果你可以逃避使用文件系統,那麼我會。在memcached中添加增加了另一層複雜性和潛在的故障點(memcached客戶端/服務器)。

對於什麼值得關於磁盤與內存性能的其他評論可能是理論上的,就好像文件系統數據被定期訪問那麼它可能會坐在操作系統或磁盤緩存中。

0

這取決於緩存是否存儲在本地。 Memcache可以通過網絡存儲數據,這不一定比本地磁盤快。

0

實際上,它並不像從內存中讀取比從硬盤中讀取要快得多。如你所知,Memcached是基於tcp連接的,如果你每次想要連接或設置memcached服務器(這是大多數程序員所做的)時建立連接,它會比使用文件緩存精確執行性能差。您應該使用靜態Memcached對象,並重用該對象。其次,現代操作系統會緩存經常使用的文件,這使得文件緩存可能比實際的TCP連接的memcaches更快。

2

「更快」不能在沒有上下文的情況下使用。 例如,由於網絡延遲,訪問遠程服務器上memcached中的數據可能會「較慢」。另一方面,通過10Gb網絡從遠程服務器內存讀取數據可能比從本地磁盤讀取相同數據「更快」。

緩存文件系統和使用memcached之間的主要區別是memcached是一個完整的緩存解決方案。因此,有LRU列表,到期概念(數據新鮮度)和一些高級操作,如cas/inc/dec/append/prepend/replace。 Memcached易於部署和監視(我們如何區分文件系統上的「緩存」工作負載,比如說內核,我們可以計算緩存數據的總量,數據分佈,容量規劃等等)。

也有一些混合系統,如cachelot 基本上,它是memcached,可以直接嵌入到應用程序中,因此緩存可以在沒有任何系統調用或網絡IO的情況下訪問。