2012-01-25 7 views
1

Luceneのリアルタイム検索機能を使用して、アプリケーションで全文検索を行っています。コミットはコストがかかるため、10個のドキュメントが追加されるたびにインデックスを作成するとします(インデックス作成には、1時間あたり約150〜200個のドキュメントが必要です)。今、プロセスを終了したい場合、プロセスが終了する前に、メモリ内のすべてのドキュメントがディスクにコミットされていることを確認するにはどうすればよいですか?ここで推奨されるアプローチはありますか?あるいは、私の書類の量があまりにも少なくてすみます。Lucene NRT Reader/Writerを正常に終了するにはどうすればいいですか?

コミットされていないすべてのドキュメントを追跡する必要がありますか?プロセスがディスクにコミットされる前にプロセスが強制終了された場合、プロセスの起動時にこれらのコミットされていないインデックスを再度インデックスする必要がありますか?

Lucene NRTは、埋め込まれたJettyを実行するプロセスで使用されます。 Shuttyコマンドを(いくつかのサーブレットを起動して)jettyに送信し、すべてのドキュメントがコミットされてからSystem.exit()を使用して終了するまで待つのは適切な方法ですか?

答えて

0

サーブレットのdestroyメソッドでバッファされたすべてのドキュメントをコミットするフックを追加し、System.exitを呼び出す前に組み込みサーブレットコンテナがシャットダウンされていることを確認できます(おそらくshutdown hookをJVMに追加します)。

これはまだ完全ではありません。プロセスが終了すると、バッファされたすべてのデータが失われます。別の解決方法は、ソフトコミットを使用することです。ソフトコミットは安価なコミットです(fsyncは実行されません)ので、プロセスが終了するとデータが失われることはありません(ただし、サーバーが予期せずシャットダウンした場合でもデータが失われる可能性があります)。

要約すると:データができなくなります

  • シャットダウンフック
    • プロセスはソフト
  • を殺された場合
  • データが失われることができる最高のスループットが
    • をコミットプロセスが終了すると失われる
    • サーバがシャットダウンした場合件の
    • のデータが失われる可能性が予期せず
  • ハードコミット(デフォルト)
    • でのデータの損失なしすべての
    • 遅い
(のfsyncを実行する必要があります)
+0

あなたはどのようにluceneでソフトコミットをしますか? Googleで検索するとリソースが見つかりません。 – naresh

+0

申し訳ありませんが、これはSolrのみの機能です。私はそれがLuceneでも利用可能だと思っていましたが、そうではありません。あなたがそれを使いたいなら、自分で実装する必要があります。 http://wiki.apache.org/solr/UpdateXmlMessagesやhttps://issues.apache.org/jira/browse/SOLR-2193にある技術文書を読むことができます(最新のパッチにはソフトコミットのための実装の実装)。 – jpountz

関連する問題