0

ASP.Net に構築する自動提案機能を備えた検索モジュールがあります。検索条件はトレーニング名で、データベースにはトレーニングを保存するテーブルがあります。サイズはテーブルで 30,000 トレーニングにも及ぶため、パフォーマンスを念頭に置いてアプローチを選択する際には非常に注意する必要があります。

約 3000 人のユーザーがシステムに同時にログインしている可能性があります。ユーザーがトレーニング名の入力を開始すると、システムは自動提案する必要があります。

私の頭に浮かんだアプローチは次のとおりです

  1. オブジェクトのキャッシュ - ユーザーが 3 文字 (例: saf) を入力するとデータベース ヒットが発生し、システムはアクティビティ テーブルで saf で始まるすべてのトレーニングを検索し、それらをキャッシュします。他のリクエストはこのキャッシュを通過します。しかし、このアプローチの問題は、システムを使用している 3000 人の同時ユーザーがいて、それらすべてが 3 つの異なる文字の異なる組み合わせを検索すると、キャッシュが吹き飛ばされることです。

  2. クライアント側のキャッシング - これについてはあまり考えていませんでした。ここで見られる唯一の欠点は、一時的なインターネット フォルダーを定期的に消去する必要がある場合があることです。

  3. セッションの使用 - パフォーマンスに影響を与えると思ったので、これを完全に除外することにしました。

私がここでとることができる最善の、または他の別のアプローチを提案してください。私はあなたがこれについて持っているすべての情報/アイデアを探しています.

どうもありがとう

ディーパ。

4

4 に答える 4

1

それを行うための私のお気に入りの jQuery プラグイン (jQuery を使用するつもりなら) はFlexboxです。

それは機能の本当に印象的なリストを持っています.

于 2009-02-06T11:16:51.973 に答える
0

あなたの投稿には、実際には 2 つの質問が含まれています。

  1. Web ページでオートコンプリートを取得するにはどうすればよいですか?
  2. 多数のクエリが同時にデータベースにヒットするため、パフォーマンスが心配です。

私の答え...

1: ASP.NET AJAX AutoComplete Extenderは、最新のすべてのブラウザーで適切に機能し、洗練されたユーザー エクスペリエンスを提供し、実装が非常に簡単であることがわかりました。

Web アプリケーションでは、特定の署名を持つメソッドを持つ Web サービスを作成する必要があります (上記のリンク先のドキュメントで説明されています)。

2: プロジェクトのこの部分で実際にパフォーマンスのボトルネックがあることを証明しましたか? テスト ハーネスをセットアップし、データベースに大量のオートコンプリート クエリを実行してどれだけの時間がかかるかを確認することをお勧めします。時期尚早の最適化に注意してください。

于 2009-02-06T17:34:05.347 に答える
0

キャッシュ機能が組み込まれているjQuery Auto Complete pluginを使用できます。

$(document).ready(function()
{
        $(".landingpage").autocomplete('/AutoSuggestHandler.ashx',
        {
            minChars: 1,
            matchSubset: 1,
            autoFill: false,
            delay: 10,
            scroll: false
        }).result(OnResultSelected);
}

さらに、汎用ハンドラーで出力キャッシングを指定して、ユーザー間でのキャッシングの必要性に対応できます。

于 2009-02-06T11:01:40.880 に答える
0

あなたの最初のアプローチがうまくいくと思います。

フィールドにインデックスがあることを確認してください。おそらく、フィールド全体にインデックスを付ける必要はありません。これにより、データベースが適切にブーストされるはずです。検索の仕組みによっては、全文のインデックス作成を検討する必要がある場合があります。パフォーマンスが問題になる場合は、インデックスに lucene などの外部ライブラリを使用することもできます。

オブジェクト、またはクエリからの結果の xml/json をキャッシュして、パフォーマンスを向上させます。

また、ブラウザーが xml/json もキャッシュするように http ヘッダーを設定する必要があります。

于 2009-02-06T11:03:58.597 に答える