1

我们有一个包含大量表的 MySQL 数据库。不幸的是,在 2018 年,我们仍然使用 Perl CGI。所以脚本的加载时间是必不可少的。

DBIx::Class被我排除了,因为它加载了大约 1.6 秒(这么长,因为它为数据库的所有表加载 Perl 定义)显然太多了。

Class::DBI加载速度有多快?我的主要问题:当我们使用 Perl 时是否会加载有关所有可用表的信息(就像DBIx::Class那样),Class::DBI或者它是否仅为我们实际使用的这些表加载 Perl 定义?


以下是DBIx::Class加载 1.6 秒的代码:

#!/usr/bin/perl

package MyApp::Schema;
use lib '.../ORMs/dbix-class';
use base qw/DBIx::Class::Schema/;

__PACKAGE__->load_namespaces();

1;

(架构是自动生成的。)

有没有办法让它更快?如何在不加载所有表的情况下使用它?

4

1 回答 1

2

我真的不推荐Class::DBI它已经无人维护了 12 年 - 每个人都切换到DBIx::Class是有充分理由的。

我强烈建议您解决导致您仍在使用 CGI 的问题。例如,是什么阻止您使用CGI::Emulate::PSGI将您的 CGI 代码简单地转换为 PSGI 应用程序,然后您可以将其部署在 FastCGI 等持久环境中,或者更好的是,作为您可以访问的独立服务使用 nginx?这些解决方案中的任何一个都意味着 DBIx::Class 加载时间不再是问题。

显然,我不知道是什么让你与 CGI 联系在一起。但是,根据我的经验,迁移到 PSGI 解决方案通常比人们预期的要容易,而且无疑会让您处于更好的位置。

于 2018-06-28T10:42:36.027 回答