1

ウェブサイトに簡単なライブ検索を追加します (入力ボックスにテキストを入力する際のヒント)。

主な任務:

  • 検索用の 39k プレーン テキスト行 (各行の長さは最大 500、合計サイズは 4Mb)
  • 1,000 人のオンライン ユーザーが同時に入力ボックスに何かを入力できる
  • 場合によっては、2,000 ~ 3,000 の結果がユーザーの要求に一致することがあります

以下の質問が気になります。

  • データベース VS テキストファイル?
  • データベース/サーバーのメモリ負荷を減らすことを目的としたタスクに関連する一般的なルールやベスト プラクティスはありますか? (キャッシュ/インデックス作成など)
  • Sphinx/Solr はそのようなタスクに適していますか?

リンク/アドバイスは非常に役立ちます。

ありがとう

PSこれが最善の解決策でしょうか?txtファイル内を検索して行全体をエコーするPHP

4

3 に答える 3

2

データをデータベースに入れ (問題なく動作するはずですが、 orSQLiteのようなより負荷の高い RDBMS を使用することもできます)、検索する列にインデックスを付けます。MySQLPostgres

つまり、フレームワークや ORM などを使用しないでください。コードの速度が低下するだけです。

PHP ファイルを作成し、検索テキストを取得して、 、、または同様SELECTのネイティブ PHP ドライバーを使用してクエリを実行します。SQLiteMySQLiPDO

また、検索ボックスがどのように機能するかについても考えてください。たとえば、最小文字数制限を設定したり (1 文字または 2 文字だけを検索するのは意味がありません)、要求の送信間隔を短くしたり (使用されていない要求を送信しないようにするため)、多くの要求を防ぐことができます。等々。

Solr などの拡張機能を使用するかどうかは、状況によって異なります。大量のデータと大量のリクエストがある場合は、調査する必要があります。しかし、単純な解決策で問題を解決できる場合は、複雑にする前に試してみるべきでしょう。

于 2012-12-18T14:04:45.093 に答える
1

私は「ライブ検索」を何度も実装しており、常にデータベース(MySQL)のクエリでAJAXを使用していますが、速度や大きな負荷の問題はまだ発生していません。

とにかく、私はSolrを使用した実装を見ましたが、それがより高速であったか、より少ないリソースを消費したかを示唆することはできません。

これは、サーバーが実行されるHW、IMOに完全に依存します。どこかで書いたように、ファイルシステムが非常に遅いサーバーを見たことがあります。そのため、txtファイルの読み取りと解析(またはSolrの使用)中にライブ検索を実装すると、データベースにクエリを実行する場合よりも遅くなる可能性があります。一方、遅いDB接続(より多くの同時接続でさらに遅くなる)で貧弱な共有ウェブホスティングでホストすることができるので、これは最良の解決策ではありません。

私の提案:MySQLをAJAXで使用し(このjqueryプラグインまたはこの記事を参照)、検索された列に適切なINDEXesを設定し、これが遅いことがわかった場合でも、txtファイルに移動できます。

于 2012-12-18T14:11:47.110 に答える
1

過去に、私はZend 検索 Luceneを使用して大きな成功を収めました。

これは、完全に PHP 5 で書かれた汎用のテキスト検索エンジンです。ソースのインデックス作成を管理し、(私の経験では) 非常に高速です。多くのクエリ タイプ、検索フィールド、検索ランキングをサポートしています。

于 2012-12-18T14:10:03.717 に答える