2010-11-12 74 views
1

好吧,我真的沒有現在如何制定這個問題,特別是沒有標題的最好方法。但我會試一試,希望我在保持與其他人相關時足夠具體。從數據庫中訪問數據每X秒(異步)

我想在後臺運行一個php腳本(通過ajax)每隔X秒從數據庫返回數據,如何在不使用大量服務器資源的情況下以最佳方式執行此操作?

我的解決辦法是這樣的:

用戶訪問一個網頁,過X秒頁面運行的JavaScript。 JavaScript調用一個調用數據庫的PHP腳本/文件,檢索數據並將數據返回給javascript。 JavaScript然後將數據打印到頁面。我擔心的是,如果頁面上有很多(10 000)個同時訪問者,那麼解決這個問題的方式會給服務器帶來很大的壓力。有沒有另一種方法來做到這一點?

回答

1

這聽起來像是最好的方式,給出的規格/要求你設置了。

另一種方法是進行中間步驟。如果你想有一個巨大的交通量(否則這不會引入任何好處,但相反可能overcomplicat /慢的過程),添加另一個表記錄了最近一次的數據集被拔掉,和硬文件(比如說XML),如果'上一次'被認爲是太久以前,是從一個新的查詢創建的,那麼這個XML會將返回的結果提供給用戶。

所以:

1.Javascript調用PHP腳本(AJAX)

2.PHP坪DB表包含上次數據是完全輸出

3,如果時間實在是太大了,「主要查詢是重新運行和XML文件從輸出 再生ELSE跳到4

4.Fetch XML文件,並輸出以適合返回AJAX

+0

所以最好從不是數據庫中的XML文件讀取數據? – 2010-11-12 11:26:00

+0

這取決於您的需要 - 在某些時候,XML文件將需要從數據庫創建。數據庫是'實時'請求的最佳選擇,具有靜態XML文件來爲請求提供服務,文件仍然從數據庫提供,但每隔一段時間更新一次,從而減少數據庫負載。它真的圍繞着你的配置 – SW4 2010-11-12 11:28:26

+0

我現在不是真的什麼中間步驟的意思。但是,每隔x秒運行一次cron動作,將結果打印到XML文件會更好嗎?你會爲我而快:) – 2010-11-12 11:29:04

1

您可以通過其他方式做到這一點,僅在需要時聯繫客戶,浪費更少的資源。

Comet它去此選項的方式:

Comet是一種編程技術, 使Web服務器,而無需任何需要 客戶端請求其數據發送到 客戶端。與傳統的AJAX相比,這種技術將產生更具響應性的 應用程序。在 經典的AJAX應用程序,Web瀏覽器 (客戶端)不能實時 時間通知服務器數據模型 改變。用戶必須(通過點擊鏈接 例如)創建 請求或者爲了獲得新的數據來回 服務器定期AJAX請求必須 發生。

+0

解決了它的一部分,是的;但仍然需要一個服務器端進程來檢查數據庫中的數據是否發生了變化。 – Piskvor 2010-11-12 11:24:10

+0

你不需要那個。改變數據庫的相同流程將觸發對用戶的請求。 – pablasso 2010-11-12 11:43:52