2011-06-30 21 views
1

mysqlデータベースでのフルテキスト検索にLucene.NETを使用する必要があります。私はInnoDBを使用しなければならないので、Luceneは私の選択した検索プロバイダです。Lucene.NETインデックスのリアルタイム更新

インデックスを作成する必要があるフィールドは、varchar(200)とvarchar(2000)の2つです。しかし、問題は、それが挿入されるとすぐにフルテキスト検索が可能でなければならないということです。だから私はレコードを同時にluceneインデックスとdbに挿入する必要があります。

これを実行することは可能ですか?1つのインサートにどれくらいの時間がかかりますか?これはWebアプリケーションのためのもので、毎秒500インサートが必要です。

あなたがそれを済ませてから、あなたの技術を教えてください。これが実現できない場合、私の唯一の選択肢は、全文検索を使用するためにSQLServerに戻ることです。 :(

PS

私は、データベースの挿入のパフォーマンスを心配していないです。しかし、私にはわからないことはLuceneのは、それがインデックスの更新に時間がかかりますこと時間である。

+2

(200 + 2000)* 500 * 60 * 60 * 24/1024/1024/1024 = 88 GBのデータが1日に挿入されます。常に500インサート/秒か、それともピークですか? – mathieu

+0

それはピークです、私は制動せずに多くの挿入を処理するシステムが必要です。 200と2000は最大限の制限です(フィールドはタイトルとブログ投稿のテキストです)ので、すべてのレコードで長すぎることはありません。実際に500 /秒が非常にまれであるかもしれませんが、私はそれを処理するためにluceneの可能性があるかどうかを知る必要があります – Amila

+1

代わりにSOLRの使用を検討しましたか?そうすれば、専用の検索デーモンを実行できます。 http://lucene.apache.org/solr/ – danielrsmith

答えて

1

はい、LuceneのNearRealtimeSearch機能を使用することは可能です。

http://wiki.apache.org/lucene-java/NearRealtimeSearch

しかし、あなたはまともな検索性能を維持したい場合は、コミットしたときに処理したいボリュームの一種で、あなたが巧みにインデックスの最適化を管理する必要があります/マージします。

+0

感謝します:) – Amila

1

のLucene。 NetまたはSQLServerの、あなたがスマートな方法を見つけない限り、あなたは4320万ドキュメント/日と困っている

+0

ooops ...私は数字が43ミルになるとは思っていませんでした。(とにかくこれはピークですが平均ではありません。 SQL Serverのフルテキストインデックスと私のsqlのないと挿入速度は大丈夫です。私はdbのについては心配していない私はそれらを動作させる方法を見つけることができますが、私はluceneを心配していると、 – Amila

+0

クワッド3GHzマシン(3GB RAM)を使用して、1日に750M文書を索引付けすることができました。(生産現場ではスピードテスト目的のためだけではありません) – Anonymous

0

ここにいくつかのガイドライン:。

  • ピーク時にその多くのデータを挿入すると、すぐに索引で利用できるようにするのが理にかなっていますか?スケジュールされたタスクはトリックを行うことができませんでしたか?
  • これらのフィールドでどのような検索をしていますか?それが本当にシンプルな場合、lucene過度ではないですか?
  • 書き込みボリュームについて教えてもらいましたが、読み込みはどうですか?非常に多くのデータがあるように見えますが、集中的に検索されていない場合は、のselect idから '%search%'のようなcolが十分ですか?

実際には、さまざまなインデックス作成戦略で概念の証明を取得し、どれが最適かを見つけるためにストレステストを行う必要があります。

関連する問題