2011年6月11日(土)に、「オープンソースカンファレンス 2011 Hokkaido」が開催されました。
弊社も協賛企業として参加しており、セミナー枠を1コマいただけましたので、
「大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック」
という発表を行わせていただきました。
弊社が「ブラウザ三国志」や「英雄クエスト」といったゲームを、PHP+MySQLで構築してきた上で、身につけたノウハウや、注意すべき箇所、指針などをまとめた発表となっています。
資料はslideshare上で公開しましたので、よろしければご覧ください。
なお、昨年も発表を行っており、その資料は「こちら」で公開しています。
最後になりますが、会場にご来場いただいた皆様、スタッフ・関係者の皆様、本当にお疲れ様でした。 改めてお礼を申し上げさせていただきます。ありがとうございました。
[…] OSC 2011 Hokkaidoの発表で使用したスライド資料「大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック」 | 株式会社インフィニットループ技術ブログ (tags: development) […]
2011年6月15日 07:02
大変、参考になりました。特に、mysqlのロック部分については、目から鱗でした。
ありがとうございました。
資料を読んでいて、どうしても分からない箇所がございました。
P23の存在しないレコードへの排他ロックについてです。
select * from t where c = 4 for update
を実行した後、別スレッド(トランザクション)で、
select * from t where c = 3 for update
が、実行できてしまうことです。
これは、上記2つのSQLでは、ギャップに対して、排他ロックではなく、共有ロックがかかっているのでしょうか?
お時間があるときにでも、ご回答いただけたら幸いです。
2011年12月14日 23:18
ななしさんコメントありがとうございます。
この部分について担当しております yukicon です。
疑問の点にお答えいたします。
スライド23Pで紹介されておりますケースでは
SELECT * FROM t WHERE c = 4 FOR UPDATE
で行われるのはギャップロックという特殊なロックになります。
ギャップロックは、挿入インテンションギャップロックという INSERT や UPDATE 時にかかるロックとのみ競合するもので、同じギャップロックとは競合しません。
そのため、別スレッドで実行された
SELECT * FROM t WHERE c = 3 FOR UPDATE
は通ることになります。(もちろん、SELECT * FROM t WHERE c = 4 FOR UPDATE でも通ります)
この時、同時にこのスレッドでもギャップロックを掴んでいます。
その意味では共有ロックと言えなくもないかもしれませんが、ギャップロックというものが少々特殊なロックなのだと考えた方が良いと思います。
2011年12月19日 20:49