2017-11-06 9 views
0

autonumbersを生成するためにドキュメントDBトリガを使用しようとしています。この目的のために、私たちはオートナンバーを保存するコレクションに特別な文書を持っており、このトリガーを呼び出すことによってコレクションの他のすべての文書が作成されます。トリガは次のように動作します。ドキュメントDBトリガは並列に実行されていますか?

1)オートナンバードキュメントから最後に使用した番号を読み取ります。 2)番号を1つ増やしてから、インクリメントした値をオートナンバー文書に戻します 3)autoIdフィールドを増分値に設定して新しい文書を作成し、新しい文書のフィールドの残りの部分を本文に渡します

await documentClient.CreateDocumentAsync("collectionURI", newDocument, new RequestOptions() { PreTriggerInclude = new List<string> {"autoNumbersTrigger"} }); 

我々のマシン上でローカルに文書DBクライアントを実行している間、私たちはこれをテストしても、100K並列挿入して、私たちのトリガーは、並行性の問題に遭遇したことはありません。したがって、問題は、この動作は保証されていますか?記述されたトリガされた動作が並行性の問題に決して走らないと言うのは安全でしょうか?

+0

あなたのコレクションにはどの程度の整合性レベルが設定されていますか? –

+0

強い一貫性 – JAson

答えて

1

同じドキュメントを同時に更新するときに返される(int)DocumentClientException.StatusCode == 449(再試行)をキャッチする必要があります。ご存知のように、これは書き込み速度が高い場合でもまれです。

+0

いいえ、その例外をキャッチした後で操作を再キューできますか?この例外を捕捉した後、トリガー操作を再試行するためのベストプラクティスを詳しく教えてください。 – JAson

+0

はい、再送信できます。トリガはトランザクショナルなので、エラーが発生すると自動的にロールバックされ、何回でも安全に再試行できます。 –

関連する問題