更新系のパフォーマンスでお悩みならMySQLのストレージエンジン「Spider」はいかがですか?

【この記事の所要時間 : 約 5 分

spider_mysql.gif
SpiderというMySQLのストレージエンジンがある。Database Shardingが可能になったストレージエンジンであり、データベースの負荷対策のためのストレージエンジンであり、日本人が作ったストレージエンジンである。聞いたことはあったがくわしくは調べていなかった。するとウノウラボのブログにSpiderの作者とのインタヴューが載っていたので読んでみると、非常にすばらしいものであることがわかった!!
データベースのパフォーマンスが悪くなってくると、参照系が問題であればレプリケーションにてMaster/Slave構成を利用するのが一般的であるが、更新系が問題であるとデータ分割が利用されることが多い。データ分割は、1つのデータベースを複数に分割することで、性能が向上し、スケーラビリティを得ることができる。しかしながらデータ分割を行うとアプリケーションに複雑な変更が必要になり、複数テーブルにまたがるJOINなどのSQLが使えないといった問題があった。
Database Sharding は、データベース(Database )を破片(Shard)に分割することであり、アプリケーションを変更せずに、データベースだけでDatabase Shardingを可能にしたのが、「Spider」であるようだ。
国産MySQLストレージエンジン「Spider」の作者、斯波健徳氏に聞く

Spider Storage Engineは斯波健徳さんにより作成されたDatabase Shardingを可能にするストレージエンジンでMySQL 5.1で利用可能です。
Spiderはデータを持たないストレージエンジンで、他のMySQLサーバーへのテーブルリンクを行います。データを持たないストレージエンジンと聞くと不思議に感じられますが、プロキシサーバのように他のMySQLサーバへ中継を行います。中継先を複数台サーバに分けることができるため負荷分散やデータ分割に利用することができます。
Spiderから接続する先の”データを持つ”ストレージエンジンは通常のMySQLサーバで、Spiderがインストールされている必要はありません。このおかげで、Spiderの設定さえ行えば、後は使いなれたInnoDBやMyISAMのノウハウをそのまま利用することができます。また、Spider経由に接続するからといって接続方法やSQL文などに変化はありません。
Spiderは多くの用途に応用できますが、簡単な例としては大量データの分散があります。MySQL 5.1では標準でテーブルパーティショニングを行うことができますが、Spiderを利用することで各パーティションをそれぞれ別のサーバに割り当てることができます。参照クエリはもちろん、更新クエリも複数サーバに処理を分散できるため、レプリケーションを使ってマスタ・スレーブ構成にしているときに悩ましい更新の集中を回避できます。
データ量や負荷が問題になったときに今まではPHPなどのアプリケーション側で複数台サーバへの分散を行うケースが多かったのではないかと思います。しかし、アプリケーション側で実装しようとすると、JOINやトランザクションなど問題があり一筋縄ではいきません。
SpiderではJOINおよびXAトランザクション(複数台サーバで同期をとるための仕組み)をサポートしているため、これらの悩みがなくなります。普通にJOINを使用して普通にBEGIN、COMMITすれば良いので、ローカルのInnoDBを使うのと変わりありません。
アプリケーション側ではデータ分割などについて意識する必要がありません。うまくいけば、データベース側の設定こそ必要ですが、アプリケーションの改修を全く行わずにデータ分散などを実現することができます。

せっかくなので、MySQLカンファレンス 2009にて斯波さんが発表されたスライドを見てみると、なんだか難しい部分は斯波さん(Spider)が全部やってくれてアプリケーションエンジニアはほぼなにもしなくてもいいんじゃないかという感じ。Spiderのインストールならびに設定など、実際にやってみると別の問題などがでてくるかもしれないがとにもかくにもすばらしいツールかと思う。
ウノウラボのブログではまとめとして、

個人的な印象ですが、「既存システムでデータ量も増えてきたしそろそろ分散しないとパフォーマンスが追いつかないけれど、アプリケーションを改修しようとするとSQLたくさん直さないといけなくて大変」、という場合にSpiderはかなり相性が良いかもしれません。特に更新処理の分散ができる点が特徴的です。データの冗長性なども同時に考える必要がありますが、今後の選択肢の一つとして検討していきたいところです。

と書かれているが、MySQLを利用しているそこそこの規模のサイトを運用している人であれば一度検討されてもいいかと思う。やっぱりすごい人はすごいね。データベースに障害が生じた時の対応や各自の運用などがどうなのか不明な点もあるが非常に実践的なエンジンかと思った。

スポンサーリンク
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
レクタングル(大)広告

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です