簡體   English   中英

PHP - 在txt文件中緩存MYSQL查詢是一種好習慣嗎?

[英]PHP - Is it good practice to cache MYSQL queries in a txt file?

我正在建立一個在線商店,並試圖通過最小化MYSQL查詢來提高性能。

通過txt文件緩存mysql查詢然后獲取而不是查詢是一種好習慣嗎? 這就是我正在做的事情

  1. php類將sql查詢作為字符串
  2. 做了一個md5
  3. 如果這是第一次運行
  4. 然后在數據庫上執行查詢
  5. 在數組中獲取結果
  6. 序列化數組並將其存儲為md5_Of_Query.txt
  7. 返回unserialize(file_get_contents(md5_of_Query.txt))或$ result實際查詢,具體取決於緩存是否存在且有效。
  8. 該類還檢查txt文件的filemtime(),如果它大於一小時,則重新執行查詢並刷新緩存。

這比每次執行sql查詢更有效嗎? 我遺失的任何安全問題?

如果您進行基准測試,那么創建唯一哈希並執行IO到磁盤的成本將大於從MySQL服務器中獲取的成本。

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

專注於構建您的應用程序,因為“過早優化是所有邪惡的根源”。

如果你剛剛啟動應用程序,memcache比使用文本文件更快捷。

http://memcached.org/

文本文件將完成這項工作,你所概述的步驟是有意義的,但memcache會更快,並為你處理繁重的工作。

您的方法看起來有點像將問題從一個角落轉移到另一個角落。

引入緩存並不能提高Mysql的性能。 更好地查看哪些查詢實際上很慢,然后優化查詢。

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

如果您希望實現緩存並着眼於未來的可伸縮性,我建議您設置運行數據庫查詢的RESTful服務,然后使用Web服務器的HTTP緩存功能來緩存結果。 步驟看起來像:

  1. 原始頁面需要運行查詢
  2. 它會為服務URL生成一個http GET請求,並將參數作為查詢參數傳遞給URL
  3. 位於URL的PHP​​腳本接受查詢的參數,驗證它們,並將它們添加到MySql查詢中
  4. 該腳本在數據庫上運行查詢
  5. 該腳本序列化結果並將其設置為輸出
  6. Web服務器緩存請求的響應,並將其返回給具有相同URL的將來請求
  7. 原始頁面使用服務的序列化結果生成HTML

您可以在此處閱讀有關使用Apache緩存PHP的更多信息。 您現在正在做的事情接近於此,但您的應用程序將能夠使用基於服務的方法更好地擴展。

只是想要權衡我的兩分錢,什么是serialworm和thephpdeveloper所說的共享內存/ ram比你提出的任何磁盤IO綁定操作快得多的事實。 盡可能多地向mysql投入ram,除非你真的需要升級到集群,否則你不需要處理緩存管理,這需要其他考慮因素。 Memcache使您可以更好地控制緩存管理,因此您需要進行更多編碼。

我將從構建應用程序開始,然后對其進行壓力測試並優化查詢,和/或根據需要添加緩存管理。

有兩件事2, 基准測試分析 關於你可以有意義地比較atything的唯一方法是使用這些diciplines的2個指標,使用你當前使用的mysql配置,php.ini,httpd.conf,.htaccess,mod重寫的東西和許多其他的東西將是基准測試和分析代理技術完成任務。

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

查詢匯編時間應該可以忽略不計。 (如果不是,那么你不應該使用SQL ,而是生成智能join可以解決的愚蠢select

從磁盤加載查詢顯然容易減慢速度。
(操作系統可能正在緩存磁盤IO,但很難發現)

真正應該花時間,無論如何, 越來越結果出來的DB,然后他們的風格回到網頁槽的模板。 在你的位置我會緩存給定磁盤查詢給定查詢的結果 ,當被問到,如果緩存不是很老,我會直接readfile()它們。

你有沒有配置MySQL的查詢緩存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM