« バリアフリー。じゃない。 | メイン | すぐに使えるCPANモジュール »

2006年01月25日

レンタルサーバでデータベースを使いたい [Perl]

Perlでデータベースといえば、DBI を使うのが筋だけれども、多くのレンタルサーバではインストールされておらず、使うことが出来ない。別に MySQLPostgreSQL が使えなくても、SQLiteSpriteText::CSV など使えるDBはいくらでもある。

これら簡易データベースを扱うには、一般的に言って DBI が必要だ。しかし普通のDBI モジュールはXSインタフェースを使っているから、インストール時にコンパイル作業が必要となる。よくあるレンタルサーバでは、この作業を許していない場合がほとんどだ。

しかしDBI::PurePerl を使えば、多少実行速度が落ちるもののコンパイルが必要ないので単純にソースファイルをアップロードすることができる。

DBIをPurePerlで動かすには、直接このモジュールを呼び出すのではなく、コンパイル前に BIGIN ブロックで環境変数にフラグを立てることで可能である。

BEGIN { $ENV{DBI_PUREPERL} = 2 }
use DBI;

しかし、残念ながら PurePerl 版の DBI では、なんと DBD::SQLite に対応していないようなのだ。 SQLite はPerl5.x に標準装備なのに関わらず、トランザクションやインデックス、ビュー、トリガに対応しているだけでなく、保存形式はバイナリでMySQLよりも高速、という素敵なデータベースエンジンだ。

これが使えないとなると、次に来る選択肢としては Sprite あたりだろうが、これが結構微妙なんだよなぁ・・・。データはテキストファイルに保存される上インデックスも作成しないので、どうしてもデータが増えるにつれて検索効率は圧倒的に下がる。やはりOracleの互換のテスト用でしかないのだろうか・・・。

ところがその DBI::PurePerl、試しにとあるレンタルサーバ2箇所で試してみたけれど、どちらも動かない。CGI::Carp してみたところ、モジュールがいくつか足りないようだ。ほとんどPurePerlなものだったので、幾つかCPANから落として入れてみる。しかし動かない。どうやらpoke1サーバのPerlのバージョンが5.005_03のようだ。・・・・って5.0!? 記憶によると5.0系はutf-8のサポートがいまいちだったはずだ。エラーの原因はこれだろうか。

結論としては、現状のレンタルサーバ用に作るプログラムにはではDBIによるデータベース接続はあまり向いていないということだ。たとえ出来たとしても、モジュールの依存関係を解消したり、バージョンの問題をサポートするのに非常に手間が掛かりそうである。一般配布用につくるアプリケーションにはDBIは止めた方が良さそうだ。

ということで、現在SDBMを使ったDBIを使わない独自のSQLエンジンを作成している。とりあえずCRUDとロック処理ぐらいはできた。これからテーブル結合やトランザクション、インデックスなどを作成していく。ただ、トランザクションを実装すると、ややメモリ消費が大きくなってしまうので、どうしたものか迷っているところではある。

xDBM系用SQLエンジン MjDB ベータ版[14.7KByte]

投稿者 : 12:00 | コメント (0) | トラックバック (0)

トラックバック

このエントリーのトラックバックURL:
http://totora.jpn.org/mt/mt-tb.cgi/99

コメント

コメントしてください




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)