Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

[Ruby][MySQL] Ruby/MySQL

$
0
0

最近 Rails でプログラム作ったりしてるのですが、Ruby/MySQL が Rails で使えないことがわかったので、1年以上放置していた Ruby/MySQL をいじって使えるようにしてみました。

Ruby/MySQL というのは Ruby スクリプトから MySQL を使用するためのライブラリです。

https://github.com/tmtm/ruby-mysql

ややこしいのですが MySQL/Ruby というのもあります。Ruby/MySQL は Ruby だけで書かれたライブラリで、MySQL/Ruby は C で書かれたライブラリです。Ruby/MySQL は MySQL/Ruby とほぼ互換があります。

Ruby/MySQL はコンパイルの必要がないため Ruby さえ動けばどこでも動くというのと、libmysqlclient を使用しないのでアプリが GPL の影響を受けないというのが特徴です。

インストール

次のようにしてインストールできます。

% gem install ruby-mysql

Railsから使う場合

次のように Rails プロジェクトを作成します。

% rails new hoge --skip-bundle --database mysql

Gemfile を次のように変更します。

gem 'mysql2'
  ↓
gem 'ruby-mysql'

その後 bundle install。

config/database.yml の mysql2 を mysql に変更します。

Rails の mysql アダプタがなぜかバージョンを 2.8.1 に固定しているので、手で変更します(ダサい)。

gems/activerecord-3.2.3/lib/active_record/connection_adapters/mysql_adapter.rb の 5行目をコメントアウト:

# gem 'mysql', '~> 2.8.1'

あとは普通に使えます。

ちなみに MySQL/Ruby の最新は 2.8.2 です。2.8.1 は場合によっては致命的なバグがあるので使わない方がいいと思います。

速度

で、まあ Ruby で書かれているのでやっぱり遅いわけです。速度を測ってみました。Ruby のバージョンは 1.9.3 と 1.8.7 です。

結果:

f:id:tmtms:20120503171652p:image

縦軸は秒です(大きい方が遅い)。処理内容は https://github.com/tmtm/ruby-mysql/tree/master/bench を見てください。

遅っ! SELECT とプリペアドステートメントの遅さが際立ちますね。プリペアドステートメントの方が遅いとか、もうね…。

「Ruby/MySQL(ext)」は、遅そうな処理を一部Cで書きなおしたバージョンです。使用するには gem で ruby-mysql の代わりに ruby-mysql-ext を指定します。

SELECT が格段に速くなりました。この際、全部 C で書きなおしちゃおうかと思ったり思わなかったり…。

まとめ

  • Ruby/MySQL はコンパイル不要
  • Ruby/MySQL は GPL 制約がない
  • Ruby/MySQL は遅い

Ruby/MySQL を作るために MySQL のプロトコルをさんざん調べたので、一度ちゃんとまとめておきたいと思ったりしてます。


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>