- - PR -
Insertが先 Updateが先
«前のページへ
1|2|3|4
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-07-24 22:02
「SELECT でロック...」は、いつしますか?
ここで、UPSERT するデータが、どのようなものか、提示されていません。1件だけなのか、複数まとめてなのか。複数の場合、UPDATE するデータもあるのか。同時アクセスがあり得るのか、あり得るなら、どの程度の規模が想定されているのか。 私は、「社内利用のウェブ アプリケーションで、グリッドに表示されたデータを編集し、何件かは追加する」という操作を想定して、前の投稿をしたのですが、皆さんは、どのような操作を想定されているのでしょう? 「Visual Studio 2005 C# でデータ処理」という以外、Windows Application なのか、Web Application なのか、どのようにデータを扱うのか、トランザクション処理のための肝心な部分が全く抜けていると思います。“社内では”、作成中のアプリケーションを把握しているでしょうから、それでもかまわないでしょう。しかし、“社外に”尋ねる場合は、これでは伝わらないし、現在作成中のアプリケーションに適した回答が得られる確率も低いのではないでしょうか。 | ||||||||||||
|
投稿日時: 2008-07-25 10:28
見えていたはずのデータが見えなくなるのは、Non-Repeatable Readですよ。 いずれにしても、Serializableが現実的なソリューションではないのは全く同意でして、今回は前提となるRDBMSを特定しない議論でしたので、あえて実装方式は考慮せずに意見を言ってみました。 | ||||||||||||
|
投稿日時: 2008-07-25 12:20
私はレコードの存在チェックが面倒だし、
レコードの存在によってif文が増えるのが面倒なので、 transaction開始 主キーでdelete insert commit で統一してます。 | ||||||||||||
|
投稿日時: 2008-07-25 16:06
こんにちは。 SELECTする数ミリ秒すらも勿体無いと感じるほど多量なデータを限られた時間内で更新するには良い方法ですね。 某大手通信会社の通信情報を扱うシステムで採用されています。 | ||||||||||||
|
投稿日時: 2008-07-26 16:46
すいません。ファントムで合ってますね。 脊髄反射で反論しちゃいました。
パフォーマンス的にはUPDATE⇒0件ならINSERTの方が良いかと。 事前にDELETEかけると更新が二回になる可能性がある分不利です。 また、意味的にもほとんど同じだと思います。
根拠として信用できないと感じるのは私だけでしょうか? | ||||||||||||
|
投稿日時: 2008-07-27 15:51
パフォーマンスの点は全く考慮していません。 if文が増えるとソースコードが汚くなっていくので、できるだけ 書かないようにしているだけです。 私が開発に携わる業務は、ほぼWebアプリケーションなので、 数ミリ秒程度の処理速度の増減はあまり意味を持ちません。 それよりもソースが見やすい方が、メンテナンス性が向上し、 結果的に迅速なサービス提供につながると考えています。 |
«前のページへ
1|2|3|4