Ruby DBI/DBDパッケージ

ここに掲載するものは、dipusさんにパッケージ化して頂いているZaurus用Ruby 1.8に追加でインストールするRubyライブラリのDBI/DBDである。
ソースをRuby Forgeからダウンロードしてパッケージ化した。

download:ruby-dbi-dbd_0.2.2.1-1_arm.ipk

DBDはPostgres、MySQL、SQLite3用のものを含めた。
これらに合わせて、データベース本体とRuby用インターフェースライブラリをインストールすることで動作する。

Ruby DBI 0.4からDBDが分離されてスッキリしたが、deplicatedライブラリを必要とするようになったため、Ruby DBI 0.2.2を利用することにした。
ソースを斜め読みした感じでは2つのバージョン間にあまり違いはないと思われる。
本ライブラリのテスト中に、PostgresとMySQL用DBDにおいて、connectメソッドでAutoCommitオプションを指定しても、デフォルト値(true)で上書きされてしまう不具合を発見したので修正を加えた。
これらの不具合は、現時点で最新バージョンのdbd-pg 0.3.9、dbd-mysql 0.4.4でも修正されていない。

以下のテストスクリプトを作成して、Perlとの速度比較を行った。

sample:dbtest.tar.gz

結果は以下の通りである。

Perl Ruby
Count AutoCommit 1 0 true false
100 Postgres (7.4.16) 7.64 1.10 8.42 1.57
MySQL (3.23.49) 0.66 0.64 1.57 1.36
SQLite3 (3.3.13) 0.41 0.14 1.09 0.77
1000 Postgres (7.4.16) 67.51 5.31 73.58 9.06
MySQL (3.23.49) 3.67 3.67 11.27 11.19
SQLite3 (3.3.13) 3.76 1.13 9.69 6.81
10000 Postgres (7.4.16) 663.84 47.30 710.96 83.15
MySQL (3.23.49) 34.05 33.63 110.22 109.54
SQLite3 (3.3.13) 39.99 11.34 98.70 67.68


上表から分かる通り、Perlの方が速い。
また、MySQLではAutoCommitの値による変化はない。
RubyではMySQLよりPostgresの方が速いようだが、これはインターフェースライブラリがPostgresはバイナリで、MySQLスクリプトで実装されているからだと考えられる。