2008-11-24 74 views
0

我有一個數據庫,我正在處理哪些是每隔幾個小時遠程更新(而不是在任何特定的時間跨度),我無法控制它的管理。我有Web客戶端連接到它來查看其中包含的信息。這些客戶端(使用PHP和Javascript編碼)可能會經常檢查數據庫(即使用戶不耐煩),即使數據庫本身可能沒有任何更改,檢查也會涉及很長時間的查詢,涉及大量查找和交叉引用等。 。在大型查詢上限制數據庫流量的最佳方法?

因此,爲了減少對數據庫的查詢,並保持精力充沛的事情會是什麼限制客戶實際上將在數據庫上運行整個查詢的次數最好的方法是什麼?

爲了使事情變得晶瑩剔透,我沒有改變數據庫的方式,我只能查詢。但是我完全控制了Web客戶端的源代碼。

回答

-3

你有在web應用程序的控制?如果用戶已登錄並且會話與其關聯,則可以緩存用戶上次查詢數據庫以來的時間,並且如果請求位於自上次查詢以來的某個閾值時間間隔以下,則拒絕回傳新數據。

PHP Sessions

+0

我應該補充:像truppo這樣的高速緩存解決方案也可以減少數據庫的往返次數,應該進行調查和考慮。 – bradheintz 2008-11-25 15:32:28

4

你應該使用某種形式的緩存。對於更嚴重的網站,請看看memcached。 如果您的規模較小,請通過序列化將結果緩存到文件中。

+0

如果足夠小的結果集,你也可以使用類似APC的東西來緩存內存中的東西。 – Powerlord 2008-11-26 19:07:29

2

我會看看Zend_Cache

每個查詢將只用於高速緩存(其可以容易地改變)的壽命運行一次。會話不是一個可行的解決方案,因爲相同的查詢每個用戶至少運行一次。會議也可以輕鬆更新。

你要檢查是否存在於緩存結果集。如果沒有,緩存結果與一個唯一的標識符設置:

$query = "SELECT * FROM really_big_table"; 
$cache_query = md5($query); 
if(!$result = $cache->load($cache_query)) 
{ 
    $result = $db->fetchAll($query); 
    $cache->save($result, $cache_query); 
} 

通過使用您在設置數據時爲所有用戶更新自己的時間幀緩存。

相關問題