2009-06-21 19 views
2

jQueryのオートコンプリートを使用してタグを検索するためのオートコンプリート機能のような "Google Suggest"を実装しています。ajaxオートコンプリート用のWebサービスを実装する最良の方法は何ですか

jQueryにWebサービスを提供する必要があります。これは、ユーザーが入力した内容に基づいて提案のリストを提供します。

1)データベースにすべてのタグを格納し、ユーザー入力をプレフィックスとして使用してDBを検索するだけです。これは簡単ですが、待ち時間が心配です。

2)インプロセストライを使用してすべてのタグを保存し、一致する結果を検索します。すべてがインプロセスであるので、私はこれがはるかに低い待ち時間を持つと思います。しかし、いくつかの困難があります: - プロセス起動時にトライを初期化するにはどうすればよいですか?推測可能なのは、タグデータをDBに保存し、それらを取得して、プロセスを開始するときにトライに変換します。しかし、私はどのようにわからない。私はPython/Djangoを使用しています。 - ユーザーが新しいタグを作成するときに、新しいタグをトライに挿入する必要があります。しかし、5つのDjangoプロセスと5つの試行があるとしましょう。他の4つの試行でも、新しいタグを挿入する必要があると教えてください。 - 私のDjangoプロセスがスレッド化されるので、trieがスレッドセーフであることを確認する方法(私はmod_wsgiを使用しています)。あるいは、PythonのGILのためにスレッドを心配する必要はありませんか? - どのようにしても、タグの使用頻度をトライ内に保存できますか?タグの文字列がいつ終了するのか、いつ周波数が始まるのかをどのように伝えますか?私がapple213をトライに格納すると、それは周波数213の "apple"ですか、周波数13の "apple2"ですか?

上記の問題に関する助けや、別のアプローチに関する提案は本当に感謝します。

+0

あなたはあなたのタグをいくつ考えていますか? – Josh

+0

あなたはSOAPのようなものを使用するWebサービスについて話していますか?もしそうなら、私は複雑な余分なレイヤーを追加し、より多くの待ち時間を引き起こすので、これに対してWebサービスの使用を避けます。オートコンプリートの場合は、AJAXリクエストをサーバーに送信し、可能であれば、キャッシュされたデータベース結果から提案やクエリをデータベースに問い合わせます。 – rich

+0

すべてのタグはユーザー作成となるため、そこにいくつのタグがあるのか​​は分かりません。それは本当に私のサイトがどのくらい人気を得ているか – Continuation

答えて

4

があなたの前対策事を、レイテンシを心配するしないでください、

を支援 - 、擬似タグの束を構成するDBでそれらを固執し、対策の待ち時間一般的なクエリの場合あなたのDBの設定によっては、レイテンシがうまくいくかもしれないし、浪費されてしまう心配もありません。

は常にしかし、スレッドを心配しない - GILは、コントロールは任意の疑似コードの命令境界でスレッドを切り替えるかもしれません(競合条件が消えることはありません、だけでなく、根本的な拡張や組み込みのCコードが実行されるとき)。最初に、使用しているDBA APIモジュールのthreadsafety属性(PEP 249を参照)を確認してから、適切にロックを使用する必要があります。またはは、DBのやりとりを実行する小さなスレッドのプールを生成します(Queue.Queue結果を別のものに返す、Pythonのサウンドとスレッドのための通常のアーキテクチャ)。

1

私は最初のオプションを使用します。 'KISS' - (それは単純な愚かなまま)。

少量のデータの場合、レイテンシはあまり長くありません。私たちは名前検索のために同じ種類のものを実行し、結果は数千の行でかなり素早く表示されます。

希望ジョシュ