スレーブのレプリケーションが遅れてたら
DBがマスタ-スレーブ構成になってる場合で、定期的(例えば1日1回とか)にテーブルを作成するようなアプリがあったとします。
それで、普通にWRITEはマスタでREADはスレーブとかやってると、スレーブへのレプリケーションが遅れたりしてスレーブがSELECTしたときにスレーブにテーブルがないという可能性が0ではないと思うのですが、SELECTするプログラム部分をevalしてテーブルがないとエラったらマスタにつなぐのが普通かなぁと思うんだけど、他にいい方法があるんでしょうかねぇ。
ちなみに言語はPerlです。
↓こんな感じにする以外でいい方法あるのかな
my $dbh = DBI->connect( @slave_datasource ); my $sth = $dbh->prepare("SELECT * FROM foo"); eval { $sth->execute() }; if ( $@ ) { my $dbh = DBI->connect( @master_datasource ); my $sth = $dbh->prepare("SELECT * FROM foo"); $sth->execute(); } # do something...