introduction DBIx::Skinny #01
こんにちわ!こんにちわ!nekokakです!
このアドベントカレンダーではid:nekokakが作ったDBIx::Skinnyを紹介します。
DBIx::Skinnyの魅力を25日かけてみっちり紹介したいと思います。
初日はDBIx::Skinnyとはなにか、DBIx::Skinnyをなぜ作ったのかや、設計方針を書いてみたいと思います。
DBIx::SkinnyはsimpleでliteなDBIのラッパーでありつつ、
DBICのようなOR mapperとしても使えるように設計しています。
DBIx::Skinnyは、DBICの色々な不満を解消すべくスクラッチで書き起こしました。
DBICの不満点は色々とありますが、
行き着くところはパフォーマンスではないでしょうか?
複雑なPerlのデータ構造をもとに組み立てるSQLは生でSQLを書く事と比べると効率が落ちる事が良くあります。
勿論DBICでも生のSQLを発行する事は可能です。
ただ、生のSQLを発行してもDBICのschemaに定義したinflateなどの便利機能がつかえず、DBICを使ううまみが全くなくなってしまいます。
DBIx::Skinnyでは生のSQLを簡単に書く事ができ、結果データをinflateするなど設定した便利機能を問題なく使えるようになっています。
また、個人的にはバッチ系の処理でDBICを使ったスクリプトを叩く時とDBIx::Skinnyを使ったスクリプトを叩く時の
応答速度を比較するだけでもDBICのもっさりした感覚を特に実感できると思います。
もちろん、mod_perlやTheSchwartzなどの常駐プロセスにしてしまえば起動時のもっさり感はなくなりますが、
バッチでも早い方がいいですよね:)
DBIx::Skinnyをリリースしたあとに色々な人とDBICについて話しましたが、
パフォーマンスを問題にしている人がとても多かったです。
私はごく最近のDBICをちゃんとチェックはしていないので、間違った情報をもっていることがあるかもしれません。
ですので、反対意見などもあればどんどん言ってください。
DBIx::Skinnyはほぼ同時期に開発が始まったid:yappoさんのData::Modelや6AのData::ObjectDriverを参考にさせていただきました。
特にData::ModelはSchemaの設定方法周りを大変参考にさせていただきました。有り難うございます。
Data::Modelもすばらしいプロダクトなのでチェックしてみるといいでしょう。
DBIx::Skinnyではこのようにパフォーマンスを意識して開発しています。
勿論DBICよりも機能がすくないこともあるので、より高速に動作します。
もしDBICより遅いところがあればそれは私がチューニングをサボっているだけなので教えて下さい!
DBIx::Skinnyはgithubで開発しています。
CPANにもアップされていますが、githubの方が色々機能が増えていたりbugfixされていたりするのでgithubのバージョンがおすすめです。
http://github.com/nekokak/p5-dbix-skinny
何か質問があればIRCで聞いてもらうかメールで直接きいてもらってもOKです。
irc: #dbix-skinny@irc.perl.org
mail: nekokak+skinny _at_ gmail.com
ちなみにDBIx::Skinnyではモバイルファクトリーの新規プロジェクトでどんどん使われています。
今後mixiアプリなどでも利用される予定です。
これをきっかけでDBIx::Skinnyを使う人が増えてくれるとうれしいです。
have a nice skinny days!:)