1

いくつかのアドバイスが必要です...

オートコンプリート関数を使用して検索用語を提案するAJAXライブ検索を実行するためのさまざまなアプローチについて多くの議論を見てきました。GoogleやYouTubeのように。

一部のチュートリアルでは、AJAXを使用してXMLファイルから結果を取得することを提案しています。データベースに直接クエリを実行することを提案する人もいます。どのアプローチを取るべきかについては多くの矛盾するアドバイスがあるようですが、それぞれの長所/短所について明確なコンセンサスはありません。

構造のテーブルがあるとしましょう:

ID   TITLE   AUTHOR   LINK

タイトルに関する提案を提供するためにオートコンプリートする検索ボックスが欲しいのですが。テーブルは大きく、100000行以上です。

最善のアプローチは何ですか:

  1. キーストロークごとにDBに直接クエリを実行します(おそらく、ユーザーあたり1秒あたりのサーバー要求数を制限する関数を設定します)。

  2. XMLファイルをクエリします。これはより効率的ですか?DBに直接クエリを実行すると、サーバーが過負荷になるリスクがありますか?

  3. 他に何かありますか?

誰かが考慮する必要があることを要約できますか?サイトにAJAXライブ検索がある場合、どのようなアプローチを取りますか?

4

1 に答える 1

1

まず、100,000 行以上は小さなデータベースです。今日のコンピューターは高速で、大容量の RAM と高速バスを備えています。しかし、これがすべてではなかったとしても、適切なインデックスデータベースは、二分探索ツリーまたはより高度なバリアントのようなものを使用して、検索が O(log N) 時間またはそれよりも高速に行われるようにします。100,000 行のデータベースの場合、これは目的の要素が最大 17 回の比較で見つかることを意味します。これを 10,000,000 行までジャックすると、必要な比較は 23 回だけです。そういう意味では、サイズはほとんど問題になりません。

その XML ファイルをどのように読み込むのですか? データベースは、多くの場合、何年ものテスト、デバッグ、および最適化が行われた、よく設計されたソフトウェアです。また、現状の DB に満足できない場合は、多くの場合、DB の効率を高めるために実行できる拡張機能または変更があります。たとえば、Facebook は 1 秒あたり約 6,000 万件のクエリを処理し、それらはMySQL で実行されています

比較すると、XML ファイルには最初にインデックスが付けられていないため、読み取るたびに (O(N) 時間で) 線形検索が必要になります。ファイル I/O は比較的遅く、線形検索は低速です。

また、データベースは、不平を言うことなく一度に多くのユーザーからのヒットを取得するように設計されています。お使いの OS が、同じファイルへの多数のユーザーによる同時アクセスを処理するように設計されている場合とされていない場合があります。

DB が別のサーバー上にあり、大幅なラグ タイムがある場合は、XML オプションの方が適している可能性があります。この場合、SQLite の使用を検討するか、DB への接続を最適化してみてください。

于 2013-01-06T10:35:02.533 に答える