私は、アトミックなデータベース操作を実行する必要がある分散システムを持っています。本質的に、アプリケーションはfind or create
を実行する必要があります。分散ロックと制御フローの制約違反例外処理
私は2つのオプションを考えることができます。操作は、プロセス/システム間でアトミックであることを保証するために、分散ロックを使用してください)
A。レコードが存在するかどうかを確認します。それに応じてレコードを取得または作成します。
B)必ずレコードを挿入してください。データベースに一意の制約違反エラーを発生させ、アプリケーションで例外をキャッチします。例外が発生した場合は存在するので、代わりにレコードを取得します。
オプションAのように見えます。は、確かにですが、よりパフォーマンスが優れていますか?
コントロールフローの例外処理を使用するのは臭いですが、本当にひどいですか?私はオプションBの方が読みやすく、推論しやすいと感じています。さらに、データベースにロックを必要としません。
具体的な理由で私に具体的な理由を教えてもらえますか具体的な証拠をもってオプションBを使用することはできますか?
ありがとうございます!
このリンクをお寄せいただきありがとうございます。私はpostgres upsertについて読んだが、私はdo nothingを考えなかった。 洞察をいただきありがとうございます。 –