« 秋眠深く | Home | 最近めっきり使わなくなった »

2006年9月21日

ロック様

ロック処理をどこで設けるかについて
最適解かどうかはわからないけれど、私ならこう設計する(してきた)といった感じで。

<処理例>
1.パスワードを入力
2.おろす金額の入力画面が表示。残高は10000円だ。
3.1000円を入力
4.確定ボタンを押下
5.ありがとうございましたのお姉さん画像表示


◆設計A
・ロック箇所:2の画面表示時にデータベースの顧客残高情報に行ロック
・ロック解除:5の画面表示時。または3.~5.でキャンセル・エラーが発生した時
・2の画面表示時にロックできない場合はエラーとする。

◆設計B
・ロック箇所:4.データベース更新開始時
・ロック解除:4.データベース更新完了時
・引出後の残高が0円になる場合はエラーとする。


以前は、Aのような設計をよくやってきたけれど、今はBの設計が多いです。

処理にはそれぞれに要件があるから一概には何が良いかはわからないのだけど、
Aの場合、例えばこれが全国規模システムの在庫割当の処理だったとすると、
梅田店の上杉くんが売れ筋の商品の入力画面を起動しっぱなしで席を外してしまうと
全国でその商品の入力ができない状況が発生しそうです。


最近のアプリケーションサーバはトランザクションの機能がしっかりしていて、
連続でいろいろなデータベース・テーブルを更新する時も、アプリケーション
サーバに任せていれば考慮する箇所が少ないのが良いです。
トランザクションの伝播とか一から設計しだすと目眩がしますし。

話がずれました。
こういった設計のスキルを、ほぼ経験だけで身につけてしまっていて
改善箇所がたくさんあると思うので、スーパーエスイーならどういった設計を
するのか学びたいです。
目もくらむような美しさと実用性を備えた設計とか、そそりますねXD

コメントする