2010-05-27 83 views
0

我正在創建一個Web服務,通​​常從遠程網頁中提取數據。在獲取這些數據之後,我有一個簡單的多維信息數組可供使用。在我的服務器上拼音過程相當重要,頁面加載需要一段時間。我正在考慮使用MySQL數據庫添加一個簡單的緩存系統,其中我爲每個遠程網頁創建一行,並從其中存儲的信息數組以JSON編碼的字符串形式存儲。這是一個足夠好的系統嗎?或者像每個網頁的文本文件是一個更好的主意?在MySQL數據庫中創建一個PHP緩存系統?

+3

@Kenaniah - 如果你必須以「沒有冒犯性」作爲前言 - 也許你應該學會如何建設性地提供建議。這個孩子是17. – Matt 2010-05-27 22:20:48

+0

@Matt - 是的,我會在一秒內發佈一個建設性的答案... – Kenaniah 2010-05-27 22:27:28

回答

1

既然你刮多個網頁,並且你想你的數據將被永久緩存,你有幾種選擇 - 最好的這將是使用memcache或數據庫,如MySQL。使用文本文件不是一個好主意,因爲您必須序列化/反序列化數據,並從文件系統讀取數據。查詢數據庫或memcache的效率要高出許多倍。

既然你可能正在尋找你的緩存有點持久,我會建議去與MySQL。您只需創建一個具有自動遞增主鍵的表,該分析的JSON對象中的每個元素都有一列。 (請注意,MySQL目前不支持數組,爲了模擬它們,您需要使用關係表,或者序列化數組數據並將其提供給文本字段,前者是首選)。

每次抓取頁面時,都會運行UPDATE語句來更新數據庫中單個頁面的信息。如果您指定唯一索引來標識您的頁面(URL /等),您將獲得最佳查找性能。

+0

數據持久性是爲什麼我跳過了memcache或類似的東西。關於查詢緩存頁面的問題是:可以簡單地查詢頁面的URL,還是應該執行類似於URL的md5散列查詢操作? – 2010-05-28 02:09:17

+0

使用頁面的URL進行查詢就可以了(因爲通常可以用作唯一標識符)。只要確保在數據庫表中的該字段上添加一個唯一索引,因爲它本質上可以用作主鍵。 – Kenaniah 2010-05-28 06:32:22

1

如果你想在1臺服務器上本地存儲緩存(例如,如果你的mysql服務器和http服務器在同一個盒子上),你最好使用APC,這是一個PHP自帶的緩存服務。

如果你想遠程存儲數據(例如專用緩存盒),那麼我會用Memcache而不是MySQL。

「當你只有一把錘子......」

0

我不傾向於有特別大的APC配置,最大64 - 128MB。 Memcache可以達到幾千兆字節或更多(如果運行多個實例,則會更多)。兩者都是暫時的 - 重啓Apache或Memcache(後者的可能性較小或經常會稍微減少)將丟失數據

這取決於您希望多長時間處理數據以生成緩存,以及該緩存可能需要多長時間纔能有用。如果在重新抓取頁面之前好幾個星期--MySQL是一個完全合適的後臺存儲。

潛在的pther選項,取決於緩存的項數&數據的大小,正如您所建議的那樣,是基於文件的緩存,SQlite或其他系統。

相關問題