2012-02-29 78 views
1

我正在考慮創建一個json/xml /文本的東西插入到MySQL數據庫,以便PHP頁面將讀取此而不是MySQL查詢。當數據在mysql數據庫中更新時,它也會更新json/xml文件。這是一個好主意嗎?看起來,這將有更少的MySQL查詢,所以我認爲這可能是好的。Php,我應該使用json而不是mysql嗎?

+5

您將遇到很多開銷和一致性問題。 MySQL查詢有什麼問題? – glglgl 2012-02-29 09:06:12

+0

我認爲更少的查詢會更好的服務器。我想在不是那麼活躍的頁面上使用它,有1-2整個表的更新。 – Malixxl 2012-02-29 09:07:11

+0

取決於網站正在查看的頻率和數據庫的大小。如果數據庫的內容很大,我寧願使用mysql。 – trampi 2012-02-29 09:08:42

回答

7

看來,這將有更少的mysql查詢,所以我認爲這可能是好的。

這取決於。可能不會。

你打算做的是一種形式caching。如果頁面上使用的查詢真的非常複雜,並且需要很長時間才能進行基準測試,將結果存儲在緩存文件中並在數據更改時更新結果有時是件好事。

但是,在每個請求上運行一些簡單的SELECT查詢,無需擔心性能問題。如果您沒有看到任何實際的性能問題,那麼您最好不要使用SQL查詢。一個正確索引的數據庫真的非常快。

+3

這個。 @ Malixxl的問題是一個不成熟優化的經典案例... – 2012-02-29 09:15:32

+0

我想使用它來處理那些並未更新的頁面,如存檔頁面或舊消息。但是,有簡單的查詢。 – Malixxl 2012-02-29 09:16:31

+1

@Malix然後緩存可能沒有意義。 – 2012-02-29 09:19:53

5

這真的取決於我想。如果您正在編寫一個要加載AJAX的頁面,並且您的設置或配置很少更改,但需要每次加載,請繼續並將其寫入json文件。

如果您正在加載的內容是動態的,或者您正在通過服務器端腳本加載它,那麼MySQL將是必須的。

當心:如果您開始將設置或數據寫入json文件,您可能會遇到一百萬個安全和權限問題。

+0

我在編寫一個非常類似的答案的途中,但你幾乎涵蓋了它。將敏感信息存儲在打開的json文件中的安全隱患是非常可怕的。具有任何知識的攻擊者將能夠下載該文件並讀取其中的所有信息。我強烈建議你使用MySQL表,由於安全性,易用性和未來的打樣 – DarkMantis 2012-02-29 09:10:58

2

取決於您的應用程序大小。如果幾乎沒有什麼東西需要與數據庫交互。你可以用JSON存儲來做。

但是,如果數據庫規模很大並且想要使用RDBMS概念,那麼它將很難管理。

我想請你去通過這篇文章:

MySQL-vs-JSON-file-data-storing

+0

不錯的文章。謝謝。 – Malixxl 2012-02-29 09:23:11

+0

@Malixxl不要讓這個可怕的文章欺騙你。它與現實生活無關。 – 2012-02-29 09:27:00

6

什麼是你的目標是什麼?獲得更多的表現?

性能優化的第一條規則: 知道你的瓶頸!不要優化黑盒子。在每次優化之前和之後做基準測試。

我懷疑你的數據庫是你目前的瓶頸。即使如此,也有更好的方法來提高性能,即避免語句,而不是將結果存儲在json/text文件中。

  1. 使用MySQL查詢緩存

    MySQL是在緩存效果真的很好。你不應該自己照顧緩存結果。這裏重要的是:足夠的RAM。結帳MySQL的文檔的更多信息:http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

  2. 實現更高速緩存層

    爲了獲得你可以實現第二個高速緩存層更高的性能,以避免甚至調用數據庫之前的MySQL數據庫。您可以使用memcached或其他NoSQL解決方案(Redis,MongoDB等)以非持久,快速的方式存儲初始結果(當然,您需要首先從數據庫獲取結果)。

  3. 瞭解你的瓶頸

    正如我之前所說的,在性能優化最重要的是要知道你的瓶頸是,你用優化多少贏了。至少對於stat來說這是一種非常好的感覺:嘿,......在我們做了XYZ之後,系統速度提高了6000%。 :)

也許你的數據庫不是現在需要加速的東西。也許安裝APC會加快你的應用程序。 :)

但是回到你的問題:如果你真的想將這些結果存儲在JSON /文本文件中,你應該將這些文件存儲在tmpfs/RAM文件系統中 - 這樣它們就可以非常快地寫入和讀取。