E-カレンダー.com

2004年11月29日

やっぱり、Perlが嫌いだ! DB編

ラクダ

Perl DBIを使ってフィールドデータを取り出す時はこんな書き方してるんだけど、これってめちゃ低速らしいんだな。
while (my $hashRef = $sth->fetchrow_hashref() ) {
print $hashRef->{"id"};
print $hashRef->{"title"};
print $hashRef->{"content"};
}

やるんなら、fecthrow_arrayrefを使って、$ref->[0]...で取り出すらしい。この方が高速なんだと。こういう点もPerlが嫌な理由。オレ、やっぱ、Perl向いてないや。HAHA歯!

Posted by nohohon at 2004年11月29日 19:45 | TrackBack
Comments

Hashにキーと列番号が入ってると考えていいんですかね。
だとしたら、別途列番号を持つオブジェクトを作れば、
列インデックスで値が取り出せるんじゃないでしょか。


突然、

$hashRef->{"id"}

して取り出したフィールド値がどのオブジェクトにも属さない様に成り易いPerlが気持ち悪いですね。


俺は敢えて、$refを引数にしてnewするモデルを別途定義し中で、

$this->name = $ref->[$table->idx_name];

の様な事をしたくなります。

Posted by: token at 2004年11月29日 20:14

フェッチする場合、配列のリファレンス、配列、ハッシュの3種類があるようですね。

1.fetchrow_arrayref(高速)
 フィールドの値を保持している配列をダイレクトに参照。
2.fetchrow_array(普通)
 新たな配列に格納した後にその配列から取得
3.fetchrow_hashref(低速)
 新たなハッシュに格納してそのハッシュから取得

DBIの解説を読む限りではfetchrow_arrayも問題ないとありますが、やはり高速なarrayrefを選ぶべきなんでしょうね。うちの学校の先生はfetchrow_hashrefを思いっきり使ってましたが・・・。自分もそっちの方がしっくりきます。列番号ってしっくりきませんし・・・。うぅ〜難しいですね。

Posted by: nohohon at 2004年11月30日 16:52

どれくらいの規模で高速感を味わえるんでしょうね。
そこが解らないと、hashrefの存在意義が問われてしまいます。

列番号で取得する利点は、
列名に依存しない取得ロジックが書ける事だと思いますよ。
飽くまで、同じ構造を持ったテーブルやDBだけど意味的な扱いが違う場合でしか利用できなさそうですが・・。

Posted by: token at 2004年12月01日 03:45
Post a comment









Remember personal info?






cover
PHP5徹底攻略

SQLiteを中心に解説。
オブジェクト指向の解説はあまりなし。

cover
まるごとPHP

日本初のPHPの専門誌

cover
WEB+DB PRESS Vol.22

WEB+DB PRESSの22号.
特集のデザインパターンは必読

cover
PHP実践のツボ...実践のツボシリーズ

セキュアなPHPサイトの構築
セッションをDBに保存する方法など

cover
PHP BALCK BOOK

PHP4の文法書。
BLACK BOOKシリーズ

cover
エッセンシャルJava 2nd edition

JAVAでオブジェクト指向をきっちり学びたい人にオススメです。

cover
コンピュータは、むずかしすぎて使えない

ペルソナという仮想ユーザーを用いたデザイン手法の紹介

cover
明解JSP&Servletプログラミング...

サーバーサイドJAVAの徹底解説。簡単なMVCの解説など

cover
Web情報アーキテクチャ―最適...

ワイヤーフレームを用いた設計手法 使いやすいWebサイトの構築