2009-07-08 9 views
0

私のウェブサイトは、都市、州、および郵便番号のオートコンプリート機能を持っています。asp.net AJAXオートコンプリートのパフォーマンスを改善する方法

ユーザーがテキストボックスに都市の3文字を入力すると、その文字で始まる上位20都市が表示されます。 今のところ、私たちのアプリケーションのAutocompleteメソッドは、city、state、およびzipに関連する約900,000のレコードを持つsql 2005データベースを照会します。

しかし、都市リストを表示する応答時間は非常に遅いようです。

したがって、性能最適化のために、位置データをLuceneインデックスに格納するか、Active Directoryに格納してそこからデータを取得することをお勧めしますか?

どちらが速くなるのですか... LuceneまたはActivedirectory?それぞれの長所と短所は何ですか?何か提案してください。

ありがとうございました!

答えて

2

原子オプション(バッキングデータストアの変更など)は、おそらく最初のオプションではないはずです。むしろ、クエリの実行速度が遅い理由を調べる必要があります。まず、SQLプロファイラのクエリパフォーマンスとSql Management Studioの実行計画を見て、インデックスのような愚かなものがないかどうかを見てみましょう。あなたがその角度をカバーした後、ウェブレイヤーをチェックして、あなたが過度の量のデータを送信していないか、そうでなければスパナを作品に投げていないことを確認してください。あなたがdbまたは電線の中で自分自身を殺していないことを確立したら、それはリエンジニアリングについて考えるときです。

私のお金は、これらのオプションよりもこのタスクのデータの終わりを処理するSQL Server上にあります。 Luceneは全文検索に適しており、ADはせいぜい貧弱なデータベースです。

+0

こんにちは...ありがとうございますur ur comments ...なぜActive Directoryは貧弱なデータベースですか? –

+0

Active Directoryは階層データを格納するためのもので、実際には何千ものレコードから1つのレコードを見つけ出すためのものではありません。 – SolutionYogi

0

データを別のテーブルにキャッシュします。そのデータがどれだけ新鮮であるかによって、必要なだけ頻繁に再構築することができます。

--Create the table 
SELECT DISTINCT city, state, zip INTO myCacheTable FROM theRealTable 

--Rebuild the table anytime 
TRUNCATE TABLE myCacheTable 
INSERT INTO myCacheTable (city, state, zip) SELECT DISTINCT city, state, zip FROM theRealTable 

あなたのAJAX呼び出しが900Kよりもはるかに少ない行を持っているであろう、代わりにmyCacheTableにアクセスすることができます。

0

ワイアットの言葉に加えて、まずどの領域が遅いかを把握する必要がありますか? SQLクエリが遅いか、ブラウザとサーバーの間のネットワーク接続が遅いのですか?他に何かありますか?

私はワイアットに、SQL ServerがLuceneとActive Directoryよりもはるかに適していることに完全に同意します。

関連する問題