使用DBIx::Connector比简单地将mysql\u auto\u reconnect设置为1有什么好处?

使用DBIx::Connector比简单地将mysql\u auto\u reconnect设置为1有什么好处?,mysql,perl,module,dbi,Mysql,Perl,Module,Dbi,在处理持久性MySQL连接时,一个问题是它们在某个超时(通常为28800秒)后被删除。 Connector似乎完成了自动重新连接到已断开连接的工作,但它为每个SQL语句添加了更多的Perl代码,这可能会让人恼火。例如,而不是: $dbh->do('DROP DATABASE stackoverflow'); 人们不得不说: $conn->run( fixup => sub { my $dbh = shift;

在处理持久性MySQL连接时,一个问题是它们在某个超时(通常为28800秒)后被删除。 Connector似乎完成了自动重新连接到已断开连接的工作,但它为每个SQL语句添加了更多的Perl代码,这可能会让人恼火。例如,而不是:

    $dbh->do('DROP DATABASE stackoverflow');
人们不得不说:

    $conn->run(
        fixup => sub {
            my $dbh = shift;
            $dbh->do('DROP DATABASE stackoverflow');
        }
    );
假设不需要事务。为什么要使用DBIx::Connector而不是传递$dbh->{mysql\u auto\u reconnect}=1,这也很有效

  • 的目标是提供一个叉和线程安全的实现。所以你几乎是在问一个苹果/桔子的问题

    但是,当连接在其pingfixup中运行时,如果连接丢失,DBIx::Connector也会重新连接。请注意,默认模式为无ping模式,显然不会尝试重新连接

  • 连接器将与任何数据库后端一起工作,而不仅仅是MySQL


  • 都说。。。如果您使用的是MySQL,并且不关心DBIx::Connector的其他优点(例如,因为您从不分叉或使用线程),那么
    MySQL\u auto\u reconnect
    可能非常适合您。

    除了重新连接之外,我还想使用DBIx::Connector作为其保存点。不幸的是,虽然使用InnoDB的MySQL支持保存点,但在上的示例对我来说是一个错误。DBIx::Connector是在#perl向我推荐的,作为“数据库已经消失”错误的解决方案。Minimalist-我建议您发布您尝试过的代码和得到的错误。另请参见t/svp_live.t了解工作保存点代码(我在编写它时确实使用InnoDB进行了测试,IIRC)。@Theory:t/svp_live.t中的MySQL代码被注释掉了。我取消了它的注释,并(稍加修改)在我的系统上进行了验证。有可能我第一次没有正确使用它。感谢您的帮助。使用DBIx::Connector,我可以编写一个在Mojolicious等框架内运行的web应用程序,而不必关心该应用程序是否将在Hypnotoad等预分叉服务器上运行。它只是消除了对应用程序如何部署的担忧。