Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2004-04-21

[開発ログ]Mrs排他ロック

いままであまり考えていなかったが、そろそろ排他ロックを考える。 MrsはCGIだから排他制御をしないと同時にいくつものセッション起動が可能になってしまう。 基本はbaskelianOLのときに検証済み(実はいくつかのバグがあった。stockがマイナスになるバグは有名)で、 ユーザのコマンド発行時とショップ売買時に排他処理を行えばいい。 今回はページ遷移にロケーションを取り入れたので、全てのDB書き換えをコマンド専用CGIの処理として一本化できそうだ。 トランザクションもコマンド処理の前後だけで行えばいい。

sql.query("BEGIN;")
location = write_proc(cgi,sql,mode)#--modeで指定されたコマンド処理を行い、ジャンプすべきURLを返す
sql.query("COMMIT;")

baskelianOLはファイルロックで排他ロックを実現していたが、今回はMySQLのロック機能を使いたい。 しかし、仕様がいまいち不明だ。データベースは種類が多くそれぞれ仕様がまちまちだし、MySQLはバージョンによってもサポートされている機能がかなり違う。 もう少し勉強するか。

※追記 2004-04-26

このBEGINの開始位置は間違い。SELECTを使用する前からBEGINを開始する必要あり。