2011-08-13 92 views
1

由於最佳做法是將單個服務器上經常一起檢索(使用multiGet)的相關密鑰分組以獲得最佳性能,所以我有幾個有關客戶端功能隱式機制的問題爲此而構建。Memcached縮放:密鑰「分組」

我已經看到了兩種不同的服務方式,我認爲是使用libmemcache(專門用於php-memcached)的相同目的。第一種也是最明顯的方法是使用getByKey/setByKey將鍵映射到服務器,第二種方法是使用OPT_PREFIX_KEY選項(在memcached :: _ construct下的php文檔中發佈了一個簡單示例),根據文檔「用於爲您的項目鍵創建一個」域「。第二種方法的警告是,它只能在每個實例的基礎上設置,這可能會或可能不會是一件好事。

所以除非我完全錯誤,而這兩種方法實際上並沒有達到相同的目的;對於採用另一種方法來說,有什麼明顯的好處?

雖然我在這個話題上,我的另一個問題是:什麼是影響,如果有的話,將密鑰映射到服務器一致哈希方案?我假設如果一個節點失敗,自由形式的密鑰將被簡單地重新映射到一個新的服務器沒有任何問題..

謝謝!

回答

0

如果這些鍵真的幾乎總是一起檢索,您可能希望將它們一起緩存到一個鍵/值對中,例如通過排序和連接鍵以及將值序列化爲JSON或類似格式的字典。

回到你的問題:

  • OPT_PREFIX_KEY幾乎無關,與分組的鍵值,它只是前綴通過這個特殊的客戶端使用的所有按鍵,所以「1」變成「foo1」,由分佈式使用這個新值進行一致性哈希,沒有任何「foo」分組。
  • getByKey/setByKey做到最接近你想要的東西,因爲它可以傳遞不同的密鑰給libketama(用於選擇服務器)和memcached服務器。如果您指定了相同的第一個鍵和不同的第二個鍵 - 它們將在同一個memcached服務器上結束,但不會相互覆蓋。

過早的優化是所有罪惡

的根