簡體   English   中英

什么是實現Ajax自動完成的Web服務的最佳方法

[英]What's the best way to implement web service for ajax autocomplete

我正在實現類似“自動完成”功能的“ Google建議”,以便使用jQuery的自動完成功能進行標記搜索。

我需要為jQuery提供Web服務,並根據用戶鍵入的內容提供一系列建議。 我看到兩種實現Web服務的方式:

1)只需將所有標簽存儲在數據庫中,然后使用用戶輸入作為前綴搜索數據庫。 這很簡單,但我擔心延遲。

2)使用進程內Trie來存儲所有標簽並在其中搜索匹配的結果。 由於一切都將在進行中,因此我希望這樣做的延遲會低得多。 但是有幾個困難:-在進程啟動時初始化trie的好方法是什么? 大概我將標簽數據存儲在數據庫中,並在我第一次啟動該過程時將它們檢索並變成一個標簽。 但是我不確定如何。 我正在使用Python / Django。 -當用戶創建新標簽時,我需要將新標簽插入到trie中。 但是,假設我有5個Django進程,因此有5個嘗試,如何告訴其他4個嘗試,他們也需要插入一個新標簽? -如何確保Trie是線程安全的,因為我的Django進程將被線程化(我正在使用mod_wsgi)。 還是我不必因為Python的GIL而擔心線程的安全性? -任何方法都可以在標簽中存儲標簽的使用頻率嗎? 我如何知道標簽的字符串何時結束以及頻率何時開始-例如 如果我將apple213存儲到trie中,是頻率為213的“ apple”還是頻率為13的“ apple2”?

對於以上問題的任何幫助或對其他方法的任何建議,將不勝感激。

測量之前不要擔心延遲-組成一堆偽標記,將其粘貼到數據庫中,並測量典型查詢的延遲。 根據您的數據庫設置,您的延遲可能就很好,並且您不必擔心浪費。

但是,請始終擔心線程-GIL不會消除競爭條件(控制可能會在任何偽代碼指令邊界以及底層擴展或內置C代碼執行時在線程之間切換)。 您首先需要檢查正在使用的DB API模塊的threadsafety屬性(請參閱PEP 249 ),然后適當地使用鎖定生成執行DB交互的專用線程的小池(在Queue.Queue上接收請求並返回產生的結果又是另外一種正常的Python架構,可實現聲音的便捷傳遞。

我會使用第一個選項。 'KISS'-(保持簡單愚蠢)。

對於少量數據,不應有太多延遲。 我們使用相同的方法進行名稱搜索,結果很快就會出現在幾千行上。

希望能有所幫助,

玩笑

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM