- PR -

UPDATE処理

投稿者投稿内容
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-09-22 14:17
引用:

未記入さんの書き込み (2004-09-22 12:56) より:
トランザクションのことを勘違いされていませんか?


言葉の解釈違い、及び分野(言語)によって細かい違いは発生しますが、未記入さんの補足通りです。
「トランザクション」と一言とっても、様々なトランザクションありけり。

一応簡単に自分の補足ということで、

トランザクション
     ┣物理排他(=悲観的ロック)
     ┗論理排他(=楽観的ロック)
物理排他と論理排他の言葉について違和感(一般的でないとか)があるかもしれませんが、この辺は勘弁を。
# 悲観ロック/楽観ロック...記憶の彼方に飛んでて、ひさびさに聞き思い出しました。

引用:

ハヤセさんの書き込み (2004-09-22 13:44) より:
最初に読み込んだデータと一致するか照合します。


やはり余計な世話でしたか...(^^;
なし
会議室デビュー日: 2004/09/17
投稿数: 17
投稿日時: 2004-09-22 14:29
余計なお世話など思ってはいません。

そのお世話から、また新たにいろいろな意見が聞けるので
とても勉強になりました。

改めて、未記入さん、えんぞさん、ありがとうございました。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-09-22 15:11
引用:

未記入さんの書き込み (2004-09-22 12:56) より:
トランザクションのことを勘違いされていませんか? トランザクションが保証するのは原子性であり、排他制御は無関係です。排他制御はロック機構によって行われます。


隔離性の保証もトランザクションの重要な機能です。
保証レベルにはいろいろありますが。
そして隔離性と排他制御は非常に密接な関係にあります。

引用:

通常、確実な更新を目的とする場合は更新ロックを獲得させます。これを悲観的ロックと言います。


楽観・悲観の話をするなら、更新ロックではなくて読み取りロックのほうですかね。「確実な更新」というのを「ロストアップデートの回避」と解釈しての話ですが。

引用:

えんぞ@見習さんの書き込み (2004-09-22 14:17) より:
言葉の解釈違い、及び分野(言語)によって細かい違いは発生しますが、未記入さんの補足通りです。
「トランザクション」と一言とっても、様々なトランザクションありけり。


いや、少なくとも情報処理の分野でトランザクションと言えば、ACID特性のアレだけだと思います。「実装レベルは様々」なら分かりますが。

単なる「処理」を「トランザクション」と言うのは聞きますが、それはすごく抽象的な言い回しで、ここで議論すべきものとは思えないし。

引用:

トランザクション
     ┣物理排他(=悲観的ロック)
     ┗論理排他(=楽観的ロック)


さすがにちょっと誤解を招きすぎると思います。
トランザクション=ロック ではないので。
それを言うなら、

ロック
 ┣悲観的ロック
 ┗楽観的ロック

でしょう。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-09-22 16:18
引用:

隔離性の保証もトランザクションの重要な機能です。


トランザクションの分離性と排他は関係ないと思います。高位の分離レベルを実現するために、ロックを使用しているので「密接」なのは事実ですが。たとえば、Oracle のように非ロック(つまり排他せず)で読取り一貫性を提供しトランザクションの分離性を実現しているデータベースもありますので。

引用:

楽観・悲観の話をするなら、更新ロックではなくて読み取りロックのほうですかね。「確実な更新」というのを「ロストアップデートの回避」と解釈しての話ですが。


悲観的ロックを実現できるのは、更新ロック、排他ロックだけでしょう。共有ロックでは変換デッドロックが発生する可能性があるので「確実な更新」を保証することができません。実際、ADO で 悲観的ロック(adLockPessimistic) オプションを指定すると、更新ロックがかかるようです。

引用:

ロック
 ┣悲観的ロック
 ┗楽観的ロック


んー、どうなんでしょうね。私はいまだに疑問に思っているのです。なぜロックをかけないのに「楽観的ロック」と呼ぶのだろうと。

引用:

┣物理排他(=悲観的ロック)
┗論理排他(=楽観的ロック)


この表現のほうが分かりやすいと思います。(あ、トランザクションにぶら下がってるのはおかしいけど。) データベースの機能でロックをかけるのが「物理排他」、データベースではロックをかけないけど、アプリケーションレベルで排他制御を行う楽観的ロックを「論理排他」と呼ぶわけですよね。なるほど分かりやすいと思います。
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2004-09-22 16:39
引用:

┣物理排他
┗論理排他


自分で発言しておいてなんですが、「物理排他/論理排他」の言葉撤回。
(検索でヒットゼロだから)
どこの現場で覚えたのやら。。。
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-09-22 16:59
引用:

未記入さんの書き込み (2004-09-22 16:18) より:
トランザクションの分離性と排他は関係ないと思います。高位の分離レベルを実現するために、ロックを使用しているので「密接」なのは事実ですが。たとえば、Oracle のように非ロック(つまり排他せず)で読取り一貫性を提供しトランザクションの分離性を実現しているデータベースもありますので。



それはあくまでも読み取りのほうだけで、更新はやっぱりロックによって分離していますから。

それから「保証レベルにはいろいろある」と言いました。
どういうロックをどういう範囲でどのくらいの期間保有するかによって変わってくるということです。
ちなみにそのロックは悲観・楽観を問いません。例えばOracleのSerializable分離レベルなどは、一部を楽観ロックで実装しています。

引用:

引用:

楽観・悲観の話をするなら、更新ロックではなくて読み取りロックのほうですかね。「確実な更新」というのを「ロストアップデートの回避」と解釈しての話ですが。


悲観的ロックを実現できるのは、更新ロック、排他ロックだけでしょう。共有ロックでは変換デッドロックが発生する可能性があるので「確実な更新」を保証することができません。実際、ADO で 悲観的ロック(adLockPessimistic) オプションを指定すると、更新ロックがかかるようです。


なるほど。「確実な更新」っていうのは、楽観的ロックみたく、更新時に「最新じゃないよ」エラーが返らないようにする、しかも共有から排他にアップグレードする際のデッドロックの可能性もなくす、っていう意味でしたか。
であれば納得です。

引用:

んー、どうなんでしょうね。私はいまだに疑問に思っているのです。なぜロックをかけないのに「楽観的ロック」と呼ぶのだろうと。


同感です。でもそれが今のところ世間の共通理解になっているのだから、仕方がないと思っています。

引用:

引用:

┣物理排他(=悲観的ロック)
┗論理排他(=楽観的ロック)


この表現のほうが分かりやすいと思います。(あ、トランザクションにぶら下がってるのはおかしいけど。) データベースの機能でロックをかけるのが「物理排他」、データベースではロックをかけないけど、アプリケーションレベルで排他制御を行う楽観的ロックを「論理排他」と呼ぶわけですよね。なるほど分かりやすいと思います。


誤解が生まれなければ僕はそんなにこだわりません。
ただ未記入さんと同様、僕も最初は何のことか分からなかったもんで。

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