Solrjを使用してSolrでトランザクション管理を処理する方法は?ネット上にはこれに関連するドキュメントはあまりありません。しかし、誰かがSolrJを使用したトランザクション管理に関連するリンクや情報を提供していただければ幸いです。
2 に答える
Solrとトランザクションで覚えておく必要があるのは、分離がないということです。Solrは、私たちのほとんどのデータベース開発者が慣れているようなトランザクションをサポートしていません。
Commitは、すべてのクライアントによるすべての保留中の変更を新しいクエリに表示します。同様に、ロールバックは、すべてのクライアントによるすべての保留中の変更をロールバックします。どのクライアントがcommit/rollbackコマンドを送信したかについては考慮されていません。
このため、エラー処理によって自動的にロールバックが発生することはありません。影響は、エラーのあるデータよりもはるかに広い可能性があるためです。その結果、クリーンアップがはるかに困難になる可能性があります。
Solrのドキュメントからのガイダンスは、自動コミットを使用することです。これは、一括操作を実行する場合に特に当てはまります。おそらく複数の並列クライアントを使用して一括でインデックスを作成する場合は、頻繁に(または非常に多くのドキュメントごとに)自動コミットすることをお勧めします。これにより、作成される新しいインデックスセグメントが少なくなり、結果としてインデックス全体の断片化が少なくなります。
詳細は、Solrインスタンス(およびレプリケーションアプローチ)で発生するクエリ操作とインデックス作成操作の組み合わせによって異なります。
ここに良いLucidworksの記事があります: トランザクションログ、ソフトコミット、SolrCloudでのコミットを理解する
SolrJでトランザクションをプログラムで処理する必要があります。複数の書き込みを処理する場合。
- SolrServer api addメソッドを使用して、SolrInputDoucmentsをサーバーに追加します。
- すべてのSolrInputDocumentsが追加されたら、SolrServer APIからcommitメソッドを呼び出して、すべての変更をコミットします。
- Solrからの例外の場合、Solrへの書き込みをロールバックする場合は、SolServerapiロールバックメソッドを呼び出します。
- データベースへの書き込みもロールバックする場合は、catchブロックからランタイム例外をスローバックします。
これが私がトランザクション管理を扱った方法です。誰かがより良い答えを持っているなら、答えを改善してください。