- PR -

Insertが先 Updateが先 

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-07-24 22:02
 「SELECT でロック...」は、いつしますか?
 ここで、UPSERT するデータが、どのようなものか、提示されていません。1件だけなのか、複数まとめてなのか。複数の場合、UPDATE するデータもあるのか。同時アクセスがあり得るのか、あり得るなら、どの程度の規模が想定されているのか。

 私は、「社内利用のウェブ アプリケーションで、グリッドに表示されたデータを編集し、何件かは追加する」という操作を想定して、前の投稿をしたのですが、皆さんは、どのような操作を想定されているのでしょう?


 「Visual Studio 2005 C# でデータ処理」という以外、Windows Application なのか、Web Application なのか、どのようにデータを扱うのか、トランザクション処理のための肝心な部分が全く抜けていると思います。“社内では”、作成中のアプリケーションを把握しているでしょうから、それでもかまわないでしょう。しかし、“社外に”尋ねる場合は、これでは伝わらないし、現在作成中のアプリケーションに適した回答が得られる確率も低いのではないでしょうか。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2008-07-25 10:28
引用:

あしゅさんの書き込み (2008-07-24 18:20) より:
ファントムではないと思います。
見えていたはずのデータが見えないわけではないですし。


見えていたはずのデータが見えなくなるのは、Non-Repeatable Readですよ。

いずれにしても、Serializableが現実的なソリューションではないのは全く同意でして、今回は前提となるRDBMSを特定しない議論でしたので、あえて実装方式は考慮せずに意見を言ってみました。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2008-07-25 12:20
私はレコードの存在チェックが面倒だし、
レコードの存在によってif文が増えるのが面倒なので、

transaction開始
主キーでdelete
insert
commit

で統一してます。
kuta
会議室デビュー日: 2008/06/25
投稿数: 8
お住まい・勤務地: 東京都
投稿日時: 2008-07-25 16:06
引用:

flatlineさんの書き込み (2008-07-25 12:20) より:
私はレコードの存在チェックが面倒だし、
レコードの存在によってif文が増えるのが面倒なので、

transaction開始
主キーでdelete
insert
commit

で統一してます。



こんにちは。
SELECTする数ミリ秒すらも勿体無いと感じるほど多量なデータを限られた時間内で更新するには良い方法ですね。
某大手通信会社の通信情報を扱うシステムで採用されています。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2008-07-26 16:46
引用:

カーニーさんの書き込み (2008-07-25 10:28) より:
見えていたはずのデータが見えなくなるのは、Non-Repeatable Readですよ。



すいません。ファントムで合ってますね。
脊髄反射で反論しちゃいました。

引用:

kutaさんの書き込み (2008-07-25 16:06) より:
SELECTする数ミリ秒すらも勿体無いと感じるほど多量なデータを限られた時間内で更新するには良い方法ですね。



パフォーマンス的にはUPDATE⇒0件ならINSERTの方が良いかと。
事前にDELETEかけると更新が二回になる可能性がある分不利です。
また、意味的にもほとんど同じだと思います。

引用:

某大手通信会社の通信情報を扱うシステムで採用されています。



根拠として信用できないと感じるのは私だけでしょうか?
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2008-07-27 15:51
引用:

SELECTする数ミリ秒すらも勿体無いと感じるほど多量なデータを限られた時間内で更新するには良い方法ですね。
某大手通信会社の通信情報を扱うシステムで採用されています。



パフォーマンスの点は全く考慮していません。
if文が増えるとソースコードが汚くなっていくので、できるだけ
書かないようにしているだけです。

私が開発に携わる業務は、ほぼWebアプリケーションなので、
数ミリ秒程度の処理速度の増減はあまり意味を持ちません。
それよりもソースが見やすい方が、メンテナンス性が向上し、
結果的に迅速なサービス提供につながると考えています。

スキルアップ/キャリアアップ(JOB@IT)