在处理持久性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,这也很好用?

最佳答案

  • DBIx::Connector的既定目标是提供DBIconnect_cached()的 fork 和线程安全实现。因此,您几乎要问一个苹果/橙子的问题。

    但是,如果DBIx::Connector在其 ping fixup Connection Modes中运行时,如果连接断开,它也会重新连接。请注意,默认值为 no_ping 模式,该模式显然不会尝试重新连接。
  • DBIx::Connector可以与任何数据库后端一起使用,而不仅限于MySQL。

  • 所有人都说...如果您使用的是MySQL,并且不关心DBIx::Connector的其他优点(例如,因为您从不 fork 或使用线程),那么mysql_auto_reconnect可能对您来说是完美的。

    关于mysql - 与仅将mysql_auto_reconnect设置为1相比,使用DBIx::Connector有什么优势?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8353359/

    10-11 21:15