大規模開発におけるMySQLの使い方について結構参考になる話

http://engineer.dena.jp/2010/11/mysql-for-socialgame.html


DeNAで使われている手法のようです。


インフラエンジニアでは普通の知識なんだろうけれど、
恥ずかしながら自分には知らなかったことがいくつかあり、
結構参考になったのでメモ。

deleteはクッソ重いです。ログ系のテーブルの場合、
わざわざbuffer poolに乗ってないデータを読みだして消す必要が
あるため、ゲロ遅いです。

大量のデータを保持するDBからデータを削除する場合は、
MySQL 5.0の頃はパージするスクリプトを作って
夜中のアクセスが少ない時間に毎日回してせっせと消すといった作業が必要でしたが、
MySQL 5.1からは念願の「パーティション機能」が追加された。
規模が大きくなり秒間クエリ数が増大してくると困ったことになって
きます。一つはMySQL 5.0以下のInnoDBを使っている場合には、
弊社松信が書いているこちらのエントリにもあるように、
並列性が低いという問題があります。こちらの解決の1つの方法は
MySQL5.1以上のInnoDBを使うことで解決されます。
idはどうするか?
モバゲータウンではidだけを払い出すテーブルを1つ作って
1レコードだけinsertして、updateにより採番し、実際のテーブルには
採番したidを指定してinsertするという手段を用いています。

この採番方法は従来通りだった。
なぜMySQLには、シーケンスが実装されないのだろうか。
裏事情知っている人教えてください。


まとめるとMySQL5.1使えば幸せになれるよ!っていう話だった。


最近はクラウドを扱うことが多いので、そればかりに目がいってしまい、MySQLについては完全ノータッチ状態が続いていたけれど、MySQLの最新の機能とかもちゃんとチェックしないといかんぜよ。と思った次第です。