
perl+DBI プログラムの鉄則 のつつき。
鉄則その 1.
my $dbh = DBI->connect($dsn, $user, $password,
{RaiseError => 1, PrintError => 0, AutoCommit => 0 });
connect 時にするべきこと。
RaiseError は ON にする。そうすれば DB の処理でエラーが発生した
ときに勝手に die してくれる。いちいちエラーチェックをする
必要もなくなるし、エラーチェック漏れも起こりえない。楽できるのに、
なおかつ質も向上する。プログラマたるもの、怠惰でなくてはならない。
デフォルトでは PrintError が ON で RaiseError を OFF になっている。
RaiseError を ON にするとエラー発生時にエラーメッセージがダブって
表示されてしまうため、PrintError は OFF にする。
AutoCommit は OFF にする。コミットは、すべての処理が成功した場合に
最後に一度だけ行うもの (基本的には)。DBI のデフォルトは AutoCommit が
ON なので、INSERT・UPDATE するたびに毎回コミットしてしまう。必ず
OFF にすること。
MySQL の MyISAM と InnoDB
MySQL で、トランザクションの機能がない MyISAM 型を使っていた場合は
AutoCommit を OFF にしても意味がない。トランザクション機能を持つ
InnoDB を使うこと。どうしてもパフォーマンスが必要な場合のみ
MyISAM の使用を検討すればよい。
MySQL は MyISAM がデフォルトなためか、MySQL で育った人は、トラン
ザクションを知らない、または軽視している人が多そうな気がする (わたしは
Oracle で育って PostgreSQL にちょっと手を出した人間なので、信じられない)。
調べてみると、初期の MySQL は速度重視・トランザクションなんて不要、
という立場だったらしく、現在の MySQL のドキュメントもかなり速度を
重視したスタンスとなっている。その分、トランザクションがなくても
実装でなんとかなる、的なことが書いてある。
しかしエンタープライズ用途ではトランザクションがないと話にならないので、
MySQL も InnoDB を開発し、選択肢を増やしたわけである。
MyISAM と InnoDB の利点と欠点を知った上で比較検討し、その結果 MyISAM を
使うなら何も言わないが、InnoDB のことを知らない人はすぐに勉強すること。
まずは InnoDB を使って、パフォーマンスが悪いときに MyISAM の使用を
検討するべきである。
鉄則その 1.
my $dbh = DBI->connect($dsn, $user, $password,
{RaiseError => 1, PrintError => 0, AutoCommit => 0 });
connect 時にするべきこと。
RaiseError は ON にする。そうすれば DB の処理でエラーが発生した
ときに勝手に die してくれる。いちいちエラーチェックをする
必要もなくなるし、エラーチェック漏れも起こりえない。楽できるのに、
なおかつ質も向上する。プログラマたるもの、怠惰でなくてはならない。
デフォルトでは PrintError が ON で RaiseError を OFF になっている。
RaiseError を ON にするとエラー発生時にエラーメッセージがダブって
表示されてしまうため、PrintError は OFF にする。
AutoCommit は OFF にする。コミットは、すべての処理が成功した場合に
最後に一度だけ行うもの (基本的には)。DBI のデフォルトは AutoCommit が
ON なので、INSERT・UPDATE するたびに毎回コミットしてしまう。必ず
OFF にすること。
MySQL の MyISAM と InnoDB
MySQL で、トランザクションの機能がない MyISAM 型を使っていた場合は
AutoCommit を OFF にしても意味がない。トランザクション機能を持つ
InnoDB を使うこと。どうしてもパフォーマンスが必要な場合のみ
MyISAM の使用を検討すればよい。
MySQL は MyISAM がデフォルトなためか、MySQL で育った人は、トラン
ザクションを知らない、または軽視している人が多そうな気がする (わたしは
Oracle で育って PostgreSQL にちょっと手を出した人間なので、信じられない)。
調べてみると、初期の MySQL は速度重視・トランザクションなんて不要、
という立場だったらしく、現在の MySQL のドキュメントもかなり速度を
重視したスタンスとなっている。その分、トランザクションがなくても
実装でなんとかなる、的なことが書いてある。
しかしエンタープライズ用途ではトランザクションがないと話にならないので、
MySQL も InnoDB を開発し、選択肢を増やしたわけである。
MyISAM と InnoDB の利点と欠点を知った上で比較検討し、その結果 MyISAM を
使うなら何も言わないが、InnoDB のことを知らない人はすぐに勉強すること。
まずは InnoDB を使って、パフォーマンスが悪いときに MyISAM の使用を
検討するべきである。
スポンサーサイト


