2011-03-01 71 views
4

好吧,所以我正在處理這個項目,需要我在內存中進行關鍵值存儲查找。我正在使用的業務規則也規定,必須從每個單獨節點的內存中讀取該表,並且該表需要在多個請求中保留。APC vs自定義Mmap擴展

所以顯而易見的解決方案是使用APC與apc_fetch();和apc_store();

問題是,該表將包括鍵值對的成千上萬,將在大小一對夫婦兆字節(這將運行在機器內存巨頭)

所以我要在以下方面的一些關切如果APC在加載時對用戶緩存進行序列化,則性能會提高。

如果不是那麼這不應該是一個大交易,然後它實際上是更優化的解決方案。

但是,如果它不是一個更好的替代方案,在C語言中編寫自定義擴展,對結構的排序文件執行二分搜索,並將其保存到磁盤?或者(希望)會寫這個自定義擴展只是不值得。

勝利,損失,快速的想法?

在此先感謝

+0

我不知道我的頭頂,但APC可能在壓力下驅逐緩存條目。這是你需要考慮的事情 - 儘管如果你確定這一點,我會研究memcached。 – ide 2011-03-01 02:04:40

回答

0

雖然APC將序列上的負載,通過apc_fetch()實際的查找是通過哈希表進行,並應表現出沒有瓶頸問題,如你所說。由於您的機器是內存龐然大物,因此您應該考慮將APC的表格調整爲足夠大以將所有鍵/值對保存在內存中。這可以通過將php.ini中的apc.user_entries_hint設置爲適合您應用程序的值來完成。

+0

抓取不是我關心的瓶頸。序列化是我關心的瓶頸。幾年前,我們以相似的負載收回雅虎商店。當然,機器是內存巨無霸,但是當你需要爲每個請求序列化100k個關鍵值對的數據時,內存將只能得到你。那是嚇倒我的那部分。 – 2011-03-01 23:24:12