2012-05-24 70 views
0

我有5個數百萬行的表。問題是我需要創建一個菜單,甚至可能在未來擴展更多。選擇查詢這個表格是我網站的核心。任何訪問我的網站的人將達到服務器的十幾個選擇查詢。在這種情況下可以實現的最佳架構設計是什麼?架構問題處理來自MySql服務器的大數據

  1. 使用索引和緩存。
  2. 生成一個XML或JSON,可供所有用戶使用,而無需每次都查詢數據庫。 [XML或JSON可以通過cron作業生成,我的行不會每5分鐘更改一次]。

還有沒有其他的好辦法呢?即使批評我上面提到的我的方式是一個有效的答案。 PS:如果解決方案存在於更好的軟件架構中,我很樂意不投資更多的服務器電源。

+0

使用JSON/XML /無論如何緩存數據庫服務器結果都是一個改進,這遠非是明確的。查詢的性質是什麼:複雜的聯接?大規模聚合?廣泛的結果?結果是否爲每個用戶定製? – wallyk

+0

複雜連接是的。按用戶定製是的。 –

回答

0

我會建議使用APC用戶緩存來存儲經常使用的數據,但如果您的查詢是爲每個用戶定製的,那可能不是要走的路。

0

你必須做的第一件事是正確索引你的表,使用int類型的字段加入你的表,設置query_cache_size爲512 MB(可能更多,但這將足夠),使用APC用戶緩存。

$count = count($arr); 

for ($i = 0; $i < $count; $i++) 

這不是一個完整的指南,但它的基本知識:如果您有for循環,而不是

for ($i = 0; $i < count($arr); $i++) 

做類似處理相當大的數據。

+0

更好的是,避免在PHP中的for循環。如果你可以使用foreach,它通常更快。 – Okonomiyaki3000

+0

@ElijahMadden它取決於給定的任務。例如,'foreach($ arr as $ key => $ val)$ arr [$ key]。='something';'慢於$ key = array_keys($ arr); for($ i = 0; $ i <$ pre_calculated_size_of_key; $ i ++)$ arr [$ key [$ i]]。='something';' – Leri

+0

你說得對(http://phpbench.com/有一些很好的關於這方面的信息),但我經常想知道,如果結果可能不同於:'foreach($ arr as $ key =>&$ val)$ val。='something';'。到目前爲止,我一直懶得做我自己的測試。 – Okonomiyaki3000