2011-08-04 67 views
0

我有一個工作的實時搜索系統,整體工作得很好。但是,如果用戶輸入的速度快於返回結果,則它經常會遇到服務器上許多版本的搜索查詢同時運行的問題。防止多個同時查詢與PHP/MySQL的實時搜索

我正在中止對新版本的receoipt的ajax請求,但這當然不會影響已在服務器上進行的查詢,並且最終會遇到嚴重的瓶頸和很長的等待以獲得最終結果。我爲MyISAM表使用了MySQL,並且在轉換到InnoDB時似乎沒有任何優勢,因爲結果集將是理智的行。

我嘗試使用會話變量讓PHP等待,如果這個會話已經有一個查詢進行中,但似乎阻止它完全工作。

如果我使ajax請求syncrhonous,但它寧可擊敗對象在這裏,問題解決。

我想知道如果任何人有任何建議,如何使這項工作正常。

問候 約翰

回答

2

做任何事情更復雜之前,已直到用戶停止鍵入至少在一定的時間間隔,你認爲不發送請求(比如,1秒)?這應該會大大減少你所做的很少的努力。

+0

這是您正在尋找的答案。設置一個簡單的計時器,在達到1秒後執行您的請求。然後讓每個按鍵按下計時器重置,這樣只會在閒置x秒後纔會觸發。 – Sarah

+0

我猜用戶需要在發送ajax請求之前按「enter」鍵。 – ace

+0

@ace這並不總是可取的。想象一下,CRM類型的應用程序可以自動完成特定形式的公司名稱,並且希望在數據輸入過程中儘早回覆,而無需用戶執行特殊操作(如按「輸入」)。不過,您不希望它在每次按鍵之後都發出新的請求。 –