楽観的ロック、悲観的ロック - takihiroの日記
悲観的ロックはDBのロックなので、ロックが解除されるまで他の更新は待たされる。(タイムアウトしない限りは。)
ActiveRecordの楽観的ロックは例外を投げてしまう。まあ同時更新なんてないでしょう、とか、同時更新しようとしたら片方はやり直せばいいじゃん、とか、楽観的なケースで使える。
悲観的ロックは、同時に更新することはありえるし、もしそうなったときに更新できなかったらどうしよう嫌だなあと、悲観的なケースで使う。
上記の例では、ターミナル 1 で sleep している間に ターミナル 2 の更新を実行しても、(1)、(2) の順に結果が出力されます。
ターミナル 1 が id: 1 の Book をロックしているため、ターミナル 2 は待たされます。
悲観的ロックはDBのロックなので、ロックが解除されるまで他の更新は待たされる。(タイムアウトしない限りは。)
ActiveRecordの楽観的ロックは例外を投げてしまう。まあ同時更新なんてないでしょう、とか、同時更新しようとしたら片方はやり直せばいいじゃん、とか、楽観的なケースで使える。
悲観的ロックは、同時に更新することはありえるし、もしそうなったときに更新できなかったらどうしよう嫌だなあと、悲観的なケースで使う。
0 件のコメント:
コメントを投稿