読者です 読者をやめる 読者になる 読者になる

uokadaの見逃し三振は嫌いです

ここで述べられていることは私の個人的な意見に基づくものであり、私が所属する組織には一切の関係はありません。

PerlのDBIのメモ fetchall_arrayrefの使い方について。

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




DBI - search.cpan.org