2009-08-29 39 views

回答

14

我會說,如果你運行一個需要memcached的網站,你不應該在共享主機上運行它。

這是我的輕浮的答案。這裏有一個真實的答案:

Memcached比MEMORY存儲引擎有一些好處。

  • 存儲分佈在多個服務器上。 MEMORY存儲引擎僅限於單個主機,並受到該主機的CPU和內存的限制。
  • 快速訪問個別條目。 MEMORY存儲引擎僅具有表級鎖定功能,因此併發性受到影響。
  • 非關係密鑰/值存儲。 MEMORY存儲引擎更加結構化,這對於緩存類型的使用並不有用。此外,MEMORY將varchar展開爲全長,因此存儲效率較低。

作爲一種緩存解決方案,我不會選擇MySQL MEMORY存儲引擎。由於您使用的是PHP,因此您應該使用APC或Xcache等。這些數據緩存功能更適合PHP中的典型用法。

如果您不使用其中一種PHP緩存技術,那麼這是一個比擔心memcached與MEMORY存儲引擎更加重要的改進領域。

+0

好建議Bill +1 – 2009-08-29 06:05:48

+0

謝謝比爾,我學到了很多。 – lovespring 2009-09-01 03:22:00

1

我同意比爾,你不會像使用MySQL那樣獲得相同的性能提升。

打趣:

確保主機啓用內存存儲引擎。

SHOW ENGINES; 

這將顯示你的mysql實例中安裝的所有存儲引擎的列表和狀態。

Memcache允許您存儲任意長度的數據。在內部,它會檢查數據以查看它的存在時間,並將其放入預先分配的存儲桶中,該存儲桶與您存儲的物料的大小最接近。這部分邏輯,你需要實現自己。 MySQL的內存存儲引擎只接受固定長度的行。爲了在mysql中獲得類似的效果,你需要在內存表中創建幾個不同長度的字段來存儲數據。 http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

選擇與您的所有「桶」之間的聯合表會產生正確的值,而不論其表的關鍵是實際存儲英寸

一個mysql的疑難雜症,如果你存儲在一個字段數據比字段長(例如16字符字段中的18個字符),mysql將會截斷它而不會出現任何錯誤。

下面是一個更好的主意:使用Zend_Cache與'文件'後端。 這將在web服務器本地磁盤上存儲與memcache類似的東西。 連接到共享主機上的數據庫通常很昂貴。 (在我的godaddy帳戶上進行第一次連接時需要1到2秒)。即使是慢速磁盤也比這更快。 http://framework.zend.com/manual/en/zend.cache.html

+0

謝謝,txyoji。 – lovespring 2009-09-01 03:22:31