memcached用のユーザ定義関数

memcachedとMySQLの連携は、ここ半年くらいの間に急激に進んでおり、現在ではよりエレガントなソリューションも出てきている。たとえば、memcached用のユーザー定義関数(UDF)とblackholeストレージエンジンを使う、という手がある。片方のデータセンターで更新する際に、同時にblackholeテーブルに対してUDFつきのINSERT文を実行するのである。INSERT文はレプリケーションされるので、反対側のデータセンターでその中にあるUDFを実行して、memcachedのキャッシュを更新できる。またトリガーからblackholeテーブルにINSERTさせれば、アプリケーションプログラムからblackholeテーブルへのINSERTを実行する必要がないので、より透過的になる。UDFは共有ライブラリ形式であり、MySQLの本体ソースに影響なく使うことができるのが大きな魅力と言える。

また将来のバージョンでは、Facebookが行ったような要求に対処できるよう、「リレーログの中身を読んだ後何かの処理を行なう」ための拡張ポイントを設けて、アプリケーション側で自由に書けるようにする計画もある。

Sun/MySQLによるmemcachedのサポート

MySQLカンファレンスでは、正式ではないが、Sun/MySQLがmemcachedを有償サポートすることが伝えられた。連携機能の強化に加え、前述のようなmemcachedとMySQLを組み合わせたアーキテクチャ設計などのコンサルティングや、トラブルシューティング支援などが行われる予定である。近いうちに、Sun/MySQLのWebサイト上で正式にアナウンスが行われる予定である。

そのほかのセッション

Facebookのほかにも、Flickr、Fotolog、Wikipediaなどのよく名前の知れている事例セッションがあった。また、内部のアプリケーションの話ではなかったが、GoogleによるセッションとYouTubeのメンバーが参加したパネルディスカッションなどもあり、いかにWeb2.0系でMySQLが広く使われているかを物語っていた。

もちろん、Web2.0系でしかMySQLは使えないということはない。企業の用途によっては、スケールアウトよりも高可用性が重視されることも多い。また、こうした要求をいかに簡単に(少ない手間で)実現するかといった運用の容易性や、管理ツールの充実さなどが重視されることも多い。こうした内容をカバーしたセッションも数多く開催され、幅広い人気を集めていた。のべ100を超えるセッションが開かれたこともあって、パフォーマンスチューニング、データベース管理、事例紹介、ソースコードレベルでの機能拡張など、あらゆるジャンルにわたっての内容が揃っていた。全体的には、即実戦投入可能なチューニングやDBA関連のセッションがやはり高い人気を集めていた。

異色なセッションとしては、以下のようなものがあった。

The Lost Art of the Self Join(発表資料はこちら)

セルフジョイン(自己結合)をいかに活用するかというセッション。基礎構文などをひととおり紹介した後、6×6の数独問題を1回のSELECT文で解くというデモを紹介した。単純に総当りで解くと計算量が多すぎて処理が終わらないため、ある工夫を行っている(興味のある方は発表資料を見ていただきたい)。結果として、35回のジョインによる1個のSELECT文で、6×6の数独をわずか数秒で解いていた。9×9にも挑戦しようとしたのだが、MySQLでは「ジョイン数は61まで」という制限事項があるため、断念したとのこと。

Kickfire

今回のMySQLカンファレンスでダイヤモンドスポンサーでもあったKickfireによるセッション。Kickfireとは、アプライアンスサーバ上でSQL文の実行を行う製品である。ソフトウェア的にではなく、専用のハードウェア上で高度に最適化して処理を行うため非常に速く、とくにデータウェアハウス系の処理に強い。MySQLのストレージエンジンとして開発されている。TPC-Hというデータウェアハウス系のベンチマークでは、100GBのデータベースにおいて、MyISAMなど従来のストレージエンジンでは数時間かかるようなクエリを、わずか数秒で実行するというデモを紹介した。