当处理持久的MySQL连接时,一个问题是它们在一定的超时(通常是28800秒)后被丢弃。 DBIx :: Connector似乎完成了自动重新连接到已断开连接的工作,但它为每个SQL语句添加了更多Perl代码,这可能会让人讨厌。例如,而不是:
$dbh->do('DROP DATABASE stackoverflow');
一个人不得不说:
$conn->run(
fixup => sub {
my $dbh = shift;
$dbh->do('DROP DATABASE stackoverflow');
}
);
假设一个人不需要交易。为什么要使用DBIx :: Connector而不是传递$ dbh-> {mysql_auto_reconnect} = 1,哪个也运行良好?
答案 0 :(得分:6)
DBIx::Connector的目标是提供DBI connect_cached()的分叉和线程安全实现。所以你几乎要问一个苹果/橘子的问题。
然而,如果连接丢失,当它在 ping 或 也会重新连接> fixup Connection Modes。请注意,默认值为 no_ping 模式,显然不会尝试重新连接。
DBIx :: Connector可以与任何数据库后端一起使用,而不仅仅是MySQL。
所有人都说...如果你使用的是MySQL,并且不关心DBIx :: Connector的其他优点(例如,因为你从不分叉或使用线程),那么mysql_auto_reconnect
可能是非常适合你。