2016-11-06 15 views
1

有沒有辦法保存在一個文件中的特定MySQL查詢輸出我的應用程序服務器(而不是數據庫服務器)上更新該數據每n秒,使用戶不發送查詢我的數據庫,但只是加載緩存輸出?緩存SQL查詢的應用程序服務器上的輸出

我想過用它打開了執行查詢和數據保存到當用戶要求的數據裝載的文件中的特定.PHP一個crontab。如果這是一個好主意,是否有可能使這個.php文件不能從公共http請求中訪問?

+0

雁鵝追逐。爲什麼你甚至想這樣做? – e4c5

+0

爲了減少我的分貝上的IOPS。 –

+0

應該沒有必要這樣做。 MySql已經有了[查詢緩存](http://dev.mysql.com/doc/refman/5.7/en/query-cache.html),所以如果有的話,你不會獲得太多的收益。 – trincot

回答

2

首先,這可能不是一個好主意。如果您的目標是減少I/O,那麼當用戶負載很低時,實際上可能會增加I/O。

其次,如果你這樣做,你可能需要編寫自定義代碼,以保持本地緩存。然後,您會遇到緩存爭用問題 - 特別是在寫入和讀取同時發生時。

第三,如果問題是,查詢時間太長(這是因爲你專注於I/O帶寬不明確),然後優化數據庫和查詢將是第一步。

第四,從數據庫返回給應用程序大量的數據往往表明數據接口的設計不良。思考需要什麼可能會非常有幫助。例如,也許在服務器上排序並返回前10行是最佳解決方案。或者,也許,依靠數據庫方面是正確的解決方案。

最後,這種類型的任何解決方案必然意味着本地緩存可以與數據庫出不同步。這通常是這種方法的殺手問題。

所有這些都可以解決,但它們通常會使代碼更加複雜。如果你現在沒有真正的性能問題,那麼請記住Knuth的建議:「不成熟的優化是萬惡之源。」 (我同意這種觀點,但世界上肯定存在其他邪惡;)

+0

謝謝您的詳細解答。我正在開發一個瀏覽器擴展,只是不希望我的服務器崩潰,如果它病毒。我想要緩存的查詢對每個用戶來說都是一樣的,不管它是否與數據庫100%同步都沒關係,但是我會首先嚐試查看它是否可以在沒有我的「複雜」方法的情況下運行。謝謝 –

+0

@JuliusS。如果它發生病毒,並且你有一個可行的收入模式,那是一個甜蜜的問題。我會把「過早緩存」稱爲「甚至是邪惡」類別,因爲在很多情況下,從性能的角度來看,這只是一種錯覺。 – YvesLeBorg

+0

@YvesLeBorg好吧,那麼我想我可以開始研究其餘的代碼,並忘記這個「問題」:D –

相關問題