fetchrow_hashref は大量のレコードを取得するさいにメモリ確保で問題が起きそうなので使えないし、
fetchrow_arrayref は良さそうだけどハッシュでレコードを持てないのがイマイチ好きじゃないかな。
無精で短気で傲慢なプログラマ perl+DBI プログラムの鉄則 - fetchrow_arrayref を使え
生 DBI ユーザーのための DBI Cookbook (1) - Yet Another Hackadelic
上の記事で fetchall_arrayref でハッシュでレコードを取得出来るのを知って
かなりビビっときた。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Data::Dumper qw/Dumper/; use DBI; my $dbs =join(":", qw/DBI mysql foo localhost/); my $user = 'user'; my $pass = 'password'; my $dbh = DBI->connect($dbs, $user, $pass); my $sel = 'SELECT * FROM tweet LIMIT 100'; my $sth = $dbh->prepare($sel); $sth->execute(); while(my $row = $sth->fetchall_arrayref(+{}, 2**4)) { print scalar @$row. "\n"; #print Dumper @$row; } $sth->finish; $dbh->disconnect;
% time perl hoge.pl 16 16 16 16 16 16 4 perl hoge.pl 0.15s user 0.03s system 72% cpu 0.257 total
一度に取得するレコード数も指定できるらしい。この辺も知らなかった。
メモリ使用量とかはどうやって調べればいいかな?
Devel::MemUsedは使えないみたいなのでどれがいいのかな。Devel::Sizeあたりかな。
メモリ使用量を調べられるDevel::MemUsedを使ってみた - ホットリンク研究開発室のblog
[を] Perl スクリプト動作中のメモリ使用量を内部から調べたい
Devel::Size - Perl変数のメモリ使用量を調べる - perldoc.jp