2014-02-15 177 views
0

我是PHP的新手,因此這更多是一個概念性問題,或者甚至是關於「最佳實踐」的問題。PHP,計算和顯示每日,每週和每月統計

通常,我會看到從他們的數據庫中繪製統計信息的網站。例如,假設它是銷售主管網站。

新的銷售線索,昨日:123

新的銷售線索本月:556

新的銷售線索,今年:它可以在頁面的像頂部有統計3870

顯然,這不應該在每次顯示頁面時計算,對嗎?這可能會在服務器上造成很大的負擔?人們如何緩存這種類型的數據。任何最佳實踐?我以爲我寫了一個CRON作業,每天都會計算出來並插入數據庫。你有什麼想法?謝謝!

回答

1

您可以計算一次,然後將其存儲在xcache中。但是,在這裏,似乎並不需要cron。查詢可以運行一次並將結果存儲在xcache中。這裏重要的是根據你的用例設置存儲值的到期時間。例如。如果您需要存儲上述每日統計數據,請將到期時間設置爲幾個小時。如果數據每分鐘更新一次,則可以將過期時間設置爲幾分鐘。

就是這樣。

$newSalesLeadYest; 
if(xcache_isset("newSalesLeadYest")){ 
    $newSalesLeadYest = xcache_get("newSalesLeadYest"); 
} else{ 
    $newSalesLeadYest = runQueryToFetchStat(); 
    //Cache set for X secs 
    xcache_set("newSalesLeadYest", $newSalesLeadYest, X); 
} 
0

你需要的是拿出一個緩存策略。 有些因素可以幫助您決定:

  • 數據變化的頻率如何?
  • 現在的價值有多重要 - 如果是1分鐘,1小時,1天,它可以嗎?
  • 加載新數據的時間明智多麼昂貴?
  • 你獲得了多少流量? 10秒,100秒,數百萬?

有幾種方法可以實現結果。

  • 您可以使用類似memcached的東西來堅持數據,以避免它生成每個請求。
  • 您可以使用http緩存並使用api中的javascript加載數據客戶端。
  • 您可以擁有一個後臺工作人員(例如,由cron運行),該後臺工作人員可生成最新數字並保留到查找數據庫表中。
  • 你可以提高查詢和索引,使獲得實時數據是足夠快的速度做每一個請求
  • ,讓你有更多的靜態數據

從你給的3個例子你可以改變你的數據庫模式,3個簡單的計數應該不足以保證複雜的緩存系統。如果您可以粘貼sql查詢,我們可以幫助優化它們。

數據聽起來像它每天只會更新一次,所以一個簡單的夜間cron「flatten」查詢將是一個不錯的選擇。

+0

非常感謝。這是我相信各種緩存技術的極好概述。我想要的最簡單的查詢就像下面這樣:SELECT COUNT(quotes)FROM quotation_table;我能負擔得起在每個頁面刷新?謝謝。 – user3264461