2010年8月12日木曜日

ActiveRecordの悲観的ロック

楽観的ロック、悲観的ロック - takihiroの日記
上記の例では、ターミナル 1 で sleep している間に ターミナル 2 の更新を実行しても、(1)、(2) の順に結果が出力されます。

ターミナル 1 が id: 1 の Book をロックしているため、ターミナル 2 は待たされます。

悲観的ロックはDBのロックなので、ロックが解除されるまで他の更新は待たされる。(タイムアウトしない限りは。)

ActiveRecordの楽観的ロックは例外を投げてしまう。まあ同時更新なんてないでしょう、とか、同時更新しようとしたら片方はやり直せばいいじゃん、とか、楽観的なケースで使える。

悲観的ロックは、同時に更新することはありえるし、もしそうなったときに更新できなかったらどうしよう嫌だなあと、悲観的なケースで使う。

0 件のコメント:

ブログ アーカイブ

カテゴリー