Ektorp(1.3.0)フレームワークを使用してCouchDBデータベースに接続しています。ただし、更新の競合がある場合は問題があります。executeAllOrNothing
一括更新の方法を使用してい ます。文書化されているように、このメソッド(および同等のHTTP API _bulk_docs?all_or_nothing":true
は、競合をチェックしません。HTTPAPIドキュメントから:
ただし、ID 0のドキュメントに競合がある場合は、両方のバージョンがデータベースに存在し、ビューに表示されるバージョンを任意に選択できます。?conflicts = trueのGETを使用して、このステータスを確認できます。
また:
この機能に依存するアプリケーションは、競合が解決されるまで、一部のドキュメントが欠落しているか、競合状態にあることを許容できる必要があります。
ただし、メソッドに関するEktorpのjavadocsには、次のように記載されています。
リスト(返される)には、CouchDBから返されたあらゆる種類のエラーコードを持つドキュメントのエントリのみが含まれます。つまり、すべてが正常に完了した場合、リストは空になります。
私はこれが当てはまらないことを発見しました。競合が発生した場合でも、Ektorpは空のリストを返します。失敗した操作のリストを取得する唯一の方法は、executeBulk
ではなくを使用することでしexecuteAllOrNothing
たが、これはトランザクションである必要があるため、これでは不十分です。
executeAllOrNothing
呼び出しが成功したかどうか、成功しなかった場合は、どのドキュメントに競合の問題があったかを知る方法はありますか(GET with conflicts=true
一度に数千のドキュメントを保存しようとする可能性があるため、各ドキュメントで繰り返し使用する必要はありません)。実用的ではないでしょう)?