2011-01-13 46 views
1

目前,我有一個網站,人們可以在某些球隊的曲棍球比賽期間開放。當曲棍球隊得分時,指定人員點擊安全位置上的按鈕。這會使用當前時間戳更新MySQL數據庫中的單個條目。如何存儲數百個用戶每秒可以訪問的PHP變量?

在網站的前端,有一個異步調用,每15秒運行一次PHP腳本以查詢數據庫的時間戳。然後,腳本會將當前時間與拉出的時間戳進行比較,如果距離當前時間戳15秒內,它會在網頁上觸發一個事件,包括播放吹喇叭的聲音並播放該隊的目標歌曲的短片。

在球隊的比賽中,我通常會看到很多流量,然而很多人都抱怨在球門被觸發後得分達到了15秒。我想找一種方法來解決這個問題。

顯然,我不認爲每一個在頁面上的用戶都會每隔一秒查詢一次數據庫(想想100+)就會工作;我可能會殺死我的數據庫。那麼,還有另一種方法可以實現我的結果嗎?是否有可能將PHP變量放入服務器的內存中,每次會話都可以拉取一個PHP變量,而不會產生負面影響,例如使用數據庫或文件系統讀取?

編輯:我的房東沒有memcached可供我使用,我無法安裝。這令人失望,因爲這聽起來像是最佳解決方案。有沒有人有另一種想法,我可以看看,不使用memcached

回答

5

對於這樣的事情,你想使用一種叫做Comet的技術。它並不特別困難,但需要一點努力。

基本上,您將保持一個對每個瀏覽器開放的實時連接,而不是讓他們每15秒重新打開一次連接。這使您可以立即寫入連接。

谷歌對於「彗星」和「PHP」,你應該找到一些好的資源。 http://www.zeitoun.net/articles/comet_and_php/start看起來徹底。

7

在這種情況下,類似於memcached(也可作爲memcache以對象化形式提供)等很可能是完美的解決方案,其設計目標之一是「減少動態Web應用程序中的數據庫負載」。

您可以在其main web site上了解更多關於memcached的信息,或者只是使用上面的鏈接來調查PHP的模塊。

+0

我真的很想接受這個答案,因爲它是正確的,並且能夠完美地回答我的問題。但是,在您建議使用`memcached`後,我開始查看它,並且它在主機上不可用,我無法安裝它。你不會偶然知道任何其他可能的解決方案嗎? – 2011-01-13 19:32:53

+1

@ mririgo恐怕不是 - 這通常是這種情況下的第一個停靠港。可能是一個想法,試圖哄騙你的主機提供商添加它作爲一個選項。 – 2011-01-13 19:37:18

0

http://memcached.org/是你在找什麼。這直接用於基於快速RAM的數據訪問系統中的對象,數組和變量。只要你做了併發更新,就可以減輕MySQL的負擔。

0

如果你沒有鎖定,只是閱讀,「100+」的請求甚至不是那麼重。你有沒有考慮過只做壓力測試?

相關問題