2012-10-25 32 views
2

我知道這是一個非常模糊的問題,但我正在尋找一個非常抽象的答案。自從幾個月前我開始使用GAE以來,我一直無法理解memcache,因爲它沒有用處,也沒有任何問題,它確實不那麼重要。但是,似乎memcache被認爲是一個非常有益的功能,Google甚至說道:「高性能可伸縮Web應用程序通常使用分佈式內存數據緩存來代替某些任務的強健持久性存儲。」等等我認爲一定有值得關注的東西。如何在社交網絡環境中使用memcache?

我只是不明白。性能如何?首先,您必須檢查內存緩存中是否有內容,如果不是,請查詢。我一直認爲不必處理這個問題會更快,而且只是查詢,但似乎這可能是一種天真的方法?這個差異有多大?

我想我從來不明白的是memcache是​​有用的。我可以看到如何在Stackoverflow主頁中發揮作用,其中所有用戶幾乎都看到相同的東西,所以它會很有用,實際上,在這種情況下不會使用memcache。但要說像Facebook這樣的社交網絡。每個用戶看到不同的東西。沒有兩個人看到相同的數據和內容,而且事情發生了很大的變化,memcache可能會不斷需要更新。在這種情況下,memcache可以扮演什麼角色?

此外,在像社交網絡這樣的私人網站中,如果每個用戶都必須在memcache中存儲不同的信息,memcache能夠真正適合多少?我知道GAE沒有提到它的memcache的大小,所以存儲數十萬條記錄是安全的嗎?

+1

「memcache」=內存中緩存。內存訪問的速度可能比查詢數據庫的速度要快,數據庫的數據可能在磁盤上。本質上,緩存將獲取最經常訪問的對象。 –

+0

我建議你在Google上使用這個術語「memcached at facebook」你會發現很多很好的信息。 – sahid

回答

7

您可能會經常需要使用memcache。檢查內存緩存中是否有內容是快速。從memcache獲取它是快速。如果您可以節省自己的查詢時間,則可以節省大量時間。

例如,考慮以下兩種情況:

  • 兩個人要求您的主頁。這兩個請求都將查詢作爲頁面加載的一部分。
  • 兩個人請求你的主頁。兩者都檢查緩存;一個查詢並存儲它,另一個獲取緩存的結果。

從memcache(或存儲它)獲取某物的球時間約爲2-3ms。從數據庫中獲取某些東西的時間是100ms。

因此,對於第一種情況,您總共有100ms x2 = 200ms。

在第二種情況下,您有3ms(失敗查找)+ 100ms(查詢)+ 3ms(存儲)+ 3ms(成功查找)= 109ms總數。

您總共節省了近50%。

現在考慮可能有10人請求你的主頁。第一種情況下的每個額外人員將是另一個100ms。第二種情況下的每個人只有3ms。


另請注意,您不必一次在memcache中存儲整個頁面。您還可以存儲零件。當然,並非所有的用戶都擁有相同的數據,但肯定有一些東西在他們之間共享。

+0

我知道沒有具體的數字,但是估計,memcache有多大,或者它通常有多大?像1 MB?或100MB?一個技嘉? (對於GAE)。 – Snowman

+0

http://stackoverflow.com/questions/2175586/how-much-memory-of-memcache-is-available-to-a-google-app-engine-account – Amber

+0

嗯......我只是很難過獲得心理照片。什麼是至少正確的計量單位?出於某種原因,我將它與一個標準的個人電腦硬盤緩存相比,我總是看到它是2MB或8MB ..我們在這裏談論的是相同的嗎? – Snowman

1

尺寸

你不能依靠內存緩存的大小。在計算每個應用程序的數據量方面進行了各種嘗試,結果各不相同。

可靠性

這是不可靠的。您的memcache條目的生命週期與一組黑盒(對用戶)值相關,例如請求的頻率以及自上次請求以來多長時間。

谷歌會盡量保持經常使用的條目,並會隨機地(從你的角度來看)從memcache中刪除它們。

提示

嘗試使用它上爲所有共享,或要求經常或昂貴的計算項目。好的例子是用戶實體,因爲只有用戶被加載,他們可能會不止一次地與您的應用程序進行交互。另一個可能是您放置用戶特定數據的模板,如果只有一小部分會發生變化,則可能是整個頁面。對於Facebook,它可能是完整的模板,諸如「這些朋友正在聊天」等部分,公司範圍內的部分,比如「您可能喜歡嘗試這個遊戲」,或者將推送給許多當前在線朋友的新帖子。

對每種類型的實體使用不同的緩存時間段。通過設置一個實體的有效期限比另一個實體的有效期限更短,提示App Engine最有用於保持更長的時間。緩存頁面可能僅在30秒內有用,用戶輸入可能對一小時有用。

這是一個有限的資源,谷歌將優化跨多個客戶/應用程序,爲所有客戶的利益。如果您的應用沒有受到影響,另一個需要更多的內存緩存,那麼Google推出您的memcached條目將是合理的。