2011-06-22 84 views
5

我正在建立一個在線商店&試圖通過最小化MYSQL查詢來提高性能。PHP - 在一個txt文件中緩存MYSQL查詢是否是一個好習慣?

它是很好的做法,緩存通過一個txt文件,MySQL的查詢,然後取這不是查詢?這是我在做什麼」

  1. 一個PHP類在SQL查詢語句的字符串
  2. 做它的MD5
  3. 如果這是第一次它的運行
  4. 將執行查詢在數據庫上
  5. 得到一個數組
  6. 結果序列化陣列並將其存儲爲md5_Of_Query.txt
  7. 在回報反序列化(的file_get_contents(md5_of_Query.txt))或$資源實際查詢的大小取決於緩存是否存在並且是有效的。
  8. 類還檢查txt文件的filemtime(),如果其比說,一小時過去時,則重新執行查詢並刷新緩存。

這是不是每次做SQL查詢更有效?我錯過了任何安全問題?

回答

5

如果你剛剛起步的應用程序,內存緩存是去比使用文本文件更快的方法。

http://memcached.org/

文本文件將做的工作,你已經列出有意義的步驟,但內存緩存會更快處理大量繁重的工作適合你。

+0

非常感謝,我的WAMP服務器上安裝了memcache,現在將使用此緩存進行構建。 – Emmanuel

+0

在單個WAMP上它不會產生任何區別,Windows上的文本文件訪問**已被**緩存在內存中。 Memcached增加開銷和**竊取內存** Web服務器和數據庫將有更多的用途。 Memcached意味着更多*更多*更大的場景。使用*大型*服務器場和*池*緩存服務器來回答查詢和子查詢。在這種情況下,memcached(通過**網絡套接字**詢問內存通過**文本協議**)可以從豐富的冗餘資源中獲得最佳性能。單機不能從中獲益。 – ZJR

+0

非常好的一點,但是在應用程序的開發生命週期開始時計劃擴展是個好主意。我不相信應用程序將託管在WAMP服務器上,我認爲這僅用於開發和測試。 – serialworm

8

如果你做一個標杆,做創造一個獨特的哈希值,並進行IO到磁盤的成本會比簡單地從MySQL服務器獲取更大。

恕我直言,不要打擾到程度。好的想法,但MySQL已經有了內部緩存和性能調整。

專注於構建應用程序,如「過早的優化是所有罪惡的根源。」

+0

謝謝。你的建議可以爲我節省很多試驗和錯誤。 – Emmanuel

2

如果你想與對未來的可擴展性着眼於實現緩存,我建議建立數據庫上運行的查詢RESTful服務,然後用你的Web服務器的HTTP緩存功能來緩存結果。具體的步驟是這樣的:

  1. 原始頁面需要運行一個查詢
  2. 它生成一個HTTP GET請求服務的URL傳遞參數的查詢參數的URL
  3. 位於PHP腳本該URL接受查詢中的參數,對它們進行驗證,並將它們添加到MySQL查詢
  4. 腳本運行
  5. 腳本序列化的結果,並將其設置爲輸出
  6. 帶狀片S在數據庫上查詢erver緩存的請求的響應並返回與
  7. 原始頁面使用來自服務系列化結果生成HTML

你可以閱讀更多關於使用Apache here緩存PHP相同的URL以後的請求。你現在正在做的就是接近這一點,但你的應用程序將能夠通過基於服務的方法進行更好的擴展。

1

只是想在我的兩分錢來衡量,什麼serialworm和thephpdeveloper說共享的事實,內存/ RAM比任何磁盤IO約束操作你拿出快得多。 儘可能多地向MySQL發送內存,除非確實需要升級到羣集,並且需要其他注意事項,否則不需要處理高速緩存管理。 Memcache讓您可以更好地控制緩存管理,因此您需要進行更多的編碼。

我會通過構建應用程序,然後開始強調測試和優化查詢,和/或根據需要添加緩存管理。

1

兩點2看,benchmarkingprofiling。關於唯一可以比較有意義的方法是通過使用當前使用的mysql配置,php.ini,httpd.conf,.htaccess,mod重寫的東西以及許多其他的東西將基準和剖析執行任務的代理技術。

1

這是荒謬的,你應該緩存結果

查詢組裝時間應該是非常微不足道的。 (如果不是,你沒有使用SQL作爲它應該,產生,而是流愚蠢select S其中智能join會解決的)從磁盤

加載查詢顯然是容易使事情放緩。
(操作系統可以緩存磁盤IO,雖然,使其難以察覺)

確實應該採取什麼樣的時間反正就是越來越結果出來的DB,然後他們的風格回到網頁通過模板。在你的地方,我會緩存到磁盤風格的結果與特定查詢,當問及,如果緩存是沒有太大的時候,我會直接readfile()他們。

相關問題