2012-04-30 6 views
0

私はphpとmysqlを使ってWebアプリケーションを構築しています。 Webアプリケーションは、テキストフィールド内の用語を検索するためにフルテキスト検索を実行することが可能でなければならないことが非常に重要である3-4の大きなテーブル(1テーブルあたりのレコード数)を持ちます。私は完全な酸のサポートとトランザクションが必要なので、このWebアプリケーションをmysqlで設計します。今私は、この3-4の大きなデータテーブルで検索結果のクエリをどのようにしてより速い方法で(複数の単語で)実行するかを理解しようとしています。アプローチはsolrとmysqlを統合します

私は店の古いデータについてのSolrを検討している、私はSolrのにMySQLからのデータをインポートし、定期的にcronジョブを構築することができると思いますが、私は理解していない:

  • を、私は新鮮なクエリを実行する方法ユーザーが数秒前に挿入したばかりのテキストを検索する場合はmysqlを使用します。

とユーザーが古いデータを変更する場合:他のユーザーから見える即座に修正されたデータであるために、私はsalrに瞬時に記録試合を更新するにはどうすればよい

  • ユーザーが(トランザクションで)MySQLとすぐに次のアプリケーションのtryアップデートで正しく新しいデータ値とリフレッシュのためのSolrの中にも、データを古いデータを更新したがうまく動作しない場合更新が失敗するため、solrにはすでに古いデータが含まれているため、新しいデータではなく古いデータがユーザーに表示される可能性があります。

答えて

0

Solrには、インデックス登録するドキュメントを送信するためのXML interfaceがあります。アプリケーション内の検索可能なデータが更新されるたびに、solrに追加/更新要求を提出することができます。これにより、即座にそのデータのインデックスが作成されます。

+0

私のアプリケーションがトランザクション内で別の更新を行い、それをコミットして、更新インデックスのsolrに要求を送信しても、solr更新要求が失敗した場合は、mysqlでそれを取得します。 。ユーザーは検索し、solrが失敗したためにレコードが更新されていないことを確認します。だから、私はすべての更新をmysqlで実行する必要があり、リクエストはsolrで1回のトランザクションで実行されるので、何か失敗すると、私はsolrのようにmysqlのようにデータを取得します。出来ますか? – paganotti

+0

私はあなたを正しく理解しているので、MySQLとSolrインスタンスの間に100%の一貫性が必要です。 SolrにはJavaクライアント[SolrJ](http://wiki.apache.org/solr/Solrj)があります。 solrの更新が失敗した場合、MySQLにコミットをロールバックして、単一のトランザクションの中であなたのmysqlコミットとSolrの更新を行うことができます。 – beerbajay

+0

よろしくお願いいたします。それはまた、mysqlとsolr間の100%の一貫性を得るためにsolr用のPHPドライバを使用することも可能ですか?もし私が大きなデータを持っていれば、solr上の更新インデックスはさらに時間がかかりますか?あなたが「即座に」言うので、ドキュメント変更のためのインデックスを構築するのに時間がかかり、その瞬間に更新を行うユーザーは長い時間のリクエストを待つことができないようです。 – paganotti

関連する問題