粗粒度ロック
原文: https://www.martinfowler.com/eaaCatalog/coarseGrainedLock.html
by David Rice and Matt Foemmel
関連するオブジェクト群をまとめてロックする。
解説の全文は『PofEAA』 438 ページを参照。
複数のオブジェクトをグループとしてまとめて更新できる場合がある。顧客とその住所なんてものがあるかもしれない。その場合、アプリケーションで使うならば、もしこのうちの1つをロックしたいのであれば、これらの要素を全てロックしてしまうのは意味がある。個々のオブジェクトを別々にロックすると克服すべきことが多数でてくるのだ。まず第一に、操作するには、それらをロックするために全てのオブジェクトを見つけるためのコードを書かないといけない。これは顧客とその住所については簡単なのだが、もっと他のオブジェクトをロックするとトリッキーなものになる。また、もしそのグループが複雑だった場合はどうするのだろうか。使っているフレームワークがロックの獲得を制御しているのであれば、その振る舞いはどこにあるのだろうか。もしロッキング戦略上、ロックをするには、そのオブジェクトをロードしないといけないとしたら、楽観的オフラインロック(416)のように、大きなグループに対するロックはパフォーマンスに影響する。悲観的オフラインロック(426)では、大きなロックセットは管理上悩みの種だし、ロックテーブルの奪い合いが増えてしまう。
粒度の荒いロックは単一のロックで多くのオブジェクトをカバーする。これは、ロッキング動作が単純化できるだけでなく、ロックするのに必要なグループのメンバーを全てロードしなくてよくなるのだ。
translated by money@andore.com