― Web Technology and Life ―

PerlのDBIのcloneの再接続を検証するサンプルコードとか

2011-11-17
思いつきのためアバウトな記事ですよ。

PerlのDBIモジュールのcloneメソッドがいいらしい

『DBIとforkの関係』とか『DBI#cloneというメソッド』とかで、取り挙げられているDBIのcloneメソッドを実感するためのサンプルコード。

#!/usr/bin/env perl
use strict;
use warnings;
use DBI;

my $dbh =  DBI->connect('dbi:mysql:;', 'test', 'test');

warn $dbh->do('show processlist');

$dbh->disconnect;

warn $dbh->do('show processlist');

$dbh = $dbh->clone;

warn $dbh->do('show processlist');

コネクションの再接続がなんとお手軽!

コネクションの維持に関しては『Scope::Container でリソース管理を行う』問題もあるようですが、たまにネットワーク上の問題とかでMySQLから"勝手に"コネクション切られちゃって、それらを考えずにコードかいていると「MySQL server has gone away」とかずっと出っぱなしでcronで回している系のバッチ処理が終わっているみたいな問題にはとても有効ですね!

【追記】
コメントにもありますが、『DBI#cloneの取り扱い注意 』ということです。なかなか生DBIは繊細ですね...。

Tengのもろもろ感想

コネクションの話は、Skinnyは再接続してくれたんだけどTengはしてくれなかったから、一部実験的に使うときは、Skinnyのコードを一部オーバーライドさせていたんだんけど、これでごちゃごちゃしたコードが消えてすっきりします。

個人的にTengで謎なところは、DBIx::Skinny::Schema::Loaderみたいに、Schema.pmをDumperとかLoaderで管理する際に、table情報はRDBMSからとってきて、inflate/deflate情報は、それ用の管理ファイルに書いておくみたいなことをする方法がわかればもりもり、開発初期フェーズから使っていけるんだけど。。。

Perl MySQL update_at : 2011-11-17T22:55:04
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus