0

SAN (共有エリア ネットワーク) 上に Lucene インデックスがあり、複数のマシンに分散された lucene の複数のインスタンスで使用されています。lucene のインスタンスであるインデックスを更新すると、ドキュメントの追加または更新が行われ、nativeFSLock が作成されます。これにより、他のユーザーが同時に書き込むことができなくなります。これは正常に機能します。

問題は、更新を含むバッチを lucene の任意のインスタンスに送信できるようにしたいということです。すべての更新を実行してからロックを解除したいと考えています。Lucene.net には addDocuments メソッドはなく、AddDocument のみです。そのため、すべてのドキュメントをループして、一度に 1 つずつ追加する必要があります。1 つのドキュメントが追加されるとすぐに、lucene はロックを解放し、次のファイルのために新しいロックを作成します。したがって、他の誰かが同時にドキュメントを更新または追加しようとすると、その短い時間内にロックを正常に取得することがあり、それが発生すると、バッチの一部のみが通過します (競合状態)。

ロックを取得し、バッチ全体が完了するまでロックを解除したくないのですが、何か提案はありますか?

よろしくお願いします

4

1 に答える 1

0

SAN に格納されたインデックスで NativeFSLockFactory を使用しないか、専用ノードを使用してインデックスに書き込みます。

SimpleFSLockFactory を使用してみて、ロックの問題が解決するかどうかを確認してください。しかし、SimpleFSLockFactory を使用すると、別の問題が発生する可能性があります。ロックを保持している間にプロセスがクラッシュすると、ロックが残ります。

詳細はこちら: http://lucene.apache.org/core/old_versioned_docs/versions/2_9_4/api/all/org/apache/lucene/store/NativeFSLockFactory.html

上記のリンクで指定されているロック テスト ツールを使用して環境をテストすることをお勧めします。(LockFactory、LockVerifyServer、LockStressTest の検証)

于 2012-07-09T17:14:17.660 に答える