2016-10-06 2 views
3

私の目標は、ストアドプロシージャまたはトリガを記述して、ドキュメントを読み込み、1つのトランザクションでメタデータドキュメントを更新できるようにすることです。DocumentDbストアドプロシージャとオプティミスティック同時実行

コレクションに順次書き込む場合、これは意図したとおりに動作することがわかりますが、複数のストアドプロシージャを並行して実行している場合は、etagsを比較するスクリプトを手動で設定する必要がありますか?サーバー側のスクリプト?

this articleでいくつかの例を読んだところ、読み込み操作の途中でetagが変更された場合、トランザクションが自動的に失敗するという印象を受けました。 しかし、this exampleでは、著者はrequestOptionsオブジェクトにetagを含め、それをreplaceDocumentメソッドに渡します。同様に、クライアントサイドで.NET SDKを使用しています。

これらの不一致により私は混乱しました。だから私の質問です:サーバー側のスクリプトの場合は、楽観的同時実行を実施するには、requestOptionsオブジェクトにetagを含める必要がありますか、それはデフォルトの動作ですか?

+1

これは良い質問です。私はいつも私の[sprocs](https://github.com/lmaccherone/documentdb-utils/blob/master/sprocs/updateSomeDocuments.coffee)でetagsを使用していました。(恐らく防御的かもしれませんが)孤立して実行され、読み込みと書き込みが一貫性のないビューを見る機会がないため、必要ではないと思うようになります。 –

答えて

2

各スクリプトは1つのトランザクションとして実行されます。スナップショットの分離により、2つのスクリプトが同じ文書を更新するときに、更新に成功し、それらが両方ともスナップショットで更新されたときに開始された場合、もう一方は失敗し、その後はもう一方が文書を更新する方法はありませんそれは、そのスナップショットよりも遅れていれば、スクリプトを終了してクライアントに戻らなければならず、クライアントはスクリプトを再度実行しなければならない、ドキュメントのバージョンを読み取ることができないからです。そのため、同時に保護するためにetagsを使用することは役に立ちません。

関連する問題