NeverBlock for MySQL
前回のポストで来るRails2.2のマルチスレッドとそれに伴うコネクションプーリングが実装されるという話を書きましたが、現状のRailsでもコネクションプールのようにパラレルにDBに対してクエリを投げることができるactive recordのアダプター「NeverBlock」が大きな話題になっています。
このアダプタは、Ruby1.9のFiberを1.8系にポートしたPoor Man's Fiberを使って実装されたもので、Ruby1.8系で動作し、Railsをサポートしています。
このNeverBlockはDBはPostgresまたはMySQLをサポートし、EventMachineと組み合わせることで劇的にパフォーマンスを向上させることができるようです。
では、実際にNeverBlock for MySQLを使ってみたいと思います。
まず、上記サイトからNeverBlockをチェックアウト。
git clone git://github.com/espace/neverblock.git
続いて、MySQL用ドライバ、カスタマイズされたEventMachineをチェックアウト。
git clone http://github.com/espace/mysqlplus.gitgit clone http://github.com/espace/eventmachine.git
それぞれgemをビルドし、インストール。
gem build [それぞれのgem名].gemspecgem install [それぞれのgem名].gem
現状対応しているアプリケーションサーバはthinとmongrelのみで、config/environment.rbに、thinを使う場合は
require 'never_block/frameworks/rails'require 'never_block/servers/thin'
mongrelの場合は、
require 'never_block/frameworks/rails'require 'never_block/servers/mongrel'
と記述。
そしてdatabase.ymlのアダプタを
adapter: neverblock_mysql
に変更します。これでNeveBlockを使うことが可能になります。またdatabase.yml内に
connections: [数字]
というパラメータを足してやれば、コネクション数を設定可能です。(記述しない場合はデフォルトの4になります)
NeverBlockを使うことで特に高負荷時にパフォーマンスが劇的に向上するようです。
2008/09/09 by Tomo Nozawa
