私はモバイルアプリケーション用のAPIを提供するSymfonyをベースとしたモバイルアプリケーションとサーバーを持っています。Doctrineでデッドロックを処理する方法は?
ユーザーはPost
のような状況があります。 Post
のようなユーザーがManyToManyテーブルにこの特定のユーザーが好きなエントリを追加するのは、この特定のPost
です(ステップ1)。次にPost
テーブルでlikesCounterを増やします(ステップ2)。それでUser
テーブルで私は(彼はPost
が好きだったので)ユーザーのためのガンジーポイントを増やします(ステップ3)。
多くのユーザーが同時にPost
を好きで、デッドロックが発生する状況があります(Post
テーブルまたはUser
テーブル)。 これを処理する方法は? Doctrine Docsでは、私はこのようなソリューションを見ることができます:
<?php
try {
// process stuff
} catch (\Doctrine\DBAL\Exception\RetryableException $e) {
// retry the processing
}
が、私はcatch
部分で何をすべきでしょうか?好きなプロセス(ステップ1〜3)を3回繰り返し、失敗した場合はBadRequestをモバイルアプリケーションに戻しますか?または、他の何か?
デッドロックが発生しないようにプロセスを再構築しようとする可能性がありますが、実際にはどうすればよいか知りたいと思うかもしれません。