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はスクリプトで実装されているからだと考えられる。