2010-05-21 56 views
2

我試圖想到處理實時搜索網站的最佳方式。我能想出的唯一解決方案是每隔幾秒鐘檢查一次服務器,以查找數據庫中的新內容,但這對我來說似乎不太實際。php可以偵聽mysql數據庫更改或更新嗎? ...思考實時,在這裏實時搜索

+1

那麼你打算如何將數據發送給用戶? – user242294 2010-05-21 18:29:47

+2

您是否考慮過使用啓用彗星的數據庫或守護進程? – 2010-05-22 00:29:13

+0

@Derrick你有解決嗎? – 2011-09-30 13:46:10

回答

1

不,它不能,因爲MySQL不能。您需要使用其他技術,可能包括消息隊列或流式數據庫。

0

AFAIK,當有事情發生時,無法告訴MySQL ping你的腳本。

輪詢似乎是唯一可行的解​​決方案......

+0

你認爲多數民衆贊成怎麼做了嗎? – 2010-05-22 08:27:24

+0

@Derrick WTF? Twitter有很多解決方案。你不需要DB通知任何人有更新;它可能是發佈新狀態更新的同一個腳本負責分發新線程以通知其他方。 – Seb 2010-05-22 16:24:52

+0

是的 - 但這不是一個Twitter應用程序。 – 2010-05-22 20:24:26

0

我沒有玩過,但已經注意到,Symfony框架已經出臺「事件通知」 ......基本上,每次在應用程式的一部分進行插入或更新,它創建一個事件,並且其他代碼段可以註冊以「聽」事件並觸發。

這將全部在PHP級別,而不是數據庫級別,但我認爲你在找什麼。

有關於symfony的事件,這裏的好文章:http://www.symfony-project.org/blog/2009/02/21/using-the-symfony-event-system

+0

用途是什麼,你已經發送頁面給用戶後? 這個事件系統會ping用戶並告訴他重新加載該站點嗎? – user242294 2010-05-21 18:27:57

+0

不,爲了獲取信息給用戶,您必須從客戶端進行輪詢。儘管這些事件允許其他服務器端PHP代碼基於MySQL數據庫更改運行,但這是最初的問題。 – Nathan 2010-05-21 18:34:12

+0

我將「實時搜索網站」解釋爲網站,每5(或任何)秒自動查詢新的結果,然後將該數據粘貼到已有的結果列表中 – user242294 2010-05-21 18:47:09

-1

即使PHP可能會如何u顯示更新給用戶,U必須查詢服務器來顯示結果。

唯一的辦法就是你已經在想什麼,每5秒鐘查詢一次服務器,。

+0

-1爲什麼? :S – 2010-08-27 09:28:06

2

隨着5.0.2的MySQL的支持觸發器:http://dev.mysql.com/doc/refman/5.0/en/triggers.html

但不幸的是,我不知道MySQL的不夠好,知道你是否可以做任何事情「有用」,在他們通知應用程序(在Oracle我想想着xp_)。至少你可以將一行寫入單個類似審計的表中,這樣你只需要在一個地方進行輪詢。

+0

酷似聽起來像是禮儀方向上的一步,接下來是告訴mysql運行一個php腳本,然後在web瀏覽器上運行js來更新頁面,我不明白twitter是如何做到的...... ? – 2010-05-22 08:26:09

0

你可以使用類似Gearman(它有一個MySQL interface)來推動你的PHP代碼,當發生新的事情。也許你可以使用這些事件來構建一個包含所有最新信息的靜態頁面,並在客戶端使用輪詢來獲取該靜態頁面。

雖然我還沒有使用Gearman,所以關於這種設置的細節超出了我的想象。

+0

很酷,謝謝我檢查一下。 – 2010-08-27 21:09:04

1

我有一個我在5-6年前工作過的應用程序。我當時正在尋找類似的解決方案。這是我的推特前應用程序 - 我自己開發的網頁沒有刷新的短信。我有一種方式,當時我在投票...但至少我沒有任何可怕的頁面刷新。加...我不會

這導致我彗星服務器。那是我的答案。

我被引導認爲gmail聊天使用真正的推技術以及反對投票。希望能帶領你走向正確的方向。