|簡単にベンチマークをとったところ、search等*1でマッチした件数に対して実際に使うのが半分以下で、sliceすればほぼ確実にパフォーマンスが上がるみたいです。逆にnext等を使うとかなりパフォーマンスが落ちます。いうことで、Class::DBI::Pagerは内部でsliceを使っているので、一緒に使うといいでしょう。1)->retrieve_all;みたいな感じ。いうか、Class::DBI::Pagerを使っているなら一緒にClass::DBI::Plugin::Iteratorを使うのがオススメ。Class::DBI::Plugin::Pagerと違って既存のコードを書き換えなくて済むし、他のPluginも使えるのがポイント。9);としたほうが軽いです*2。*1:retrieve_allやsearch_whereなど。*2:Class::DBI::Pagerはcountする分重い。|ダウンロードできるようにしました。ちなみにテストは適当です。ドキュメントもありません。$options);__PACKAGE__->set_up_table('favorite_films');1;__END__これだけです。あとは何も変更する必要はありません。Class::DBI::AbstractSearch等のプラグインを使っても大丈夫。Class::DBI::Iteratorとの違いdataメソッドは空を返す。本当は全部のデータをfetchして返すべき?sliceの戻り値がスカラーの場合は、Class::DBI::Iteratorオブジェクトを返す。ポインタが移動しない。構文を使っているので、それが使えないSQLでは動きません。Class::DBI::Plugin::Pagerみたいにするのが良いかとは思うけど。|ちゃんと1件ずつ取得するようなIteratorを作ってみた。毎回SQLを発行するので件数が少ないときは重くなる*1。sliceを使えばその範囲をまとめて取得するので、それほど問題はないでしょう*2。場合によってはsearchした瞬間の結果じゃないのが難点かもしれないけど*3、それが嫌ならLOCKするか配列として取得するのがいいんじゃないでしょうかね*4。ちなみにClass::DBI::Plugin::Pagerに書き換えようと言っていたのになんで作ったかというと、書き換えが思ったより面倒だったのと、思っていたより簡単に作れたから。*1:どの程度の件数でメリットがあるのかは不明。*2:逆に、Class::DBI::Iteratorのsliceは->nextをループで廻してるので効率が悪い。なんでmapや配列のスライスを使ってないのかは謎。*3:これはClass::DBI::Plugin::Pagerでも同じはずだ。*4:っつーか、ウェブアプリならセッションに突っ込まない限りあまり問題ない気もする。|mixiで「Class::DBI::AutoLoaderの使い方がわかんない」と書いてる人がいたけれど、何が分からないんだろう。);とすれば、Class::DBIを継承したFilms::FavoriteFilmsとFilms::Directorsが作られるって話でしょ。$options);__PACKAGE__->set_up_table('favorite_films');1;__END__みたいなことを自動でやってくれるんでしょう*1。tablesを指定しなければ、そのデータベースにある全部のテーブルで上記のようなことをするので楽チンだけど、その分オーバーヘッドが大きくなるとか、まあ細かい注意点はあるかもしれませんが。標準のメソッド以外を使うことも出来るけど*2、そんなことするならAutoLoaderを使う意味はないか......。*1:ソース読んでないけど。*2:packageで追加すればいいだけなので。|そんなことをして嬉しいのかは分からないのですが、「MySQLの新しいストレッジエンジンの実装」とか読んでちょっと気になった。|サイバー世界に溢れる玉石混交のソースの中から「碧玉」を探し出すのは大変な事だから、真にクオリティの高い記事を提供してくれる「媒体(パッケージ)」と「そのブランド」には、読者は「お金を払うべき」だし、提供する側も人集めなんかに利用せずに「お金を取るべき」だと思う。クオリティの高い物は、Webにも散在する形で沢山ありますが、責任を持って取りまとめ、読者に「塊」で提供するという行為自体が「絶対有償」であるべきです。