【发布时间】:2018-06-27 19:21:13
【问题描述】:
我们有一个包含大量表的 MySQL 数据库。不幸的是,在 2018 年,我们仍然使用 Perl CGI。所以脚本的加载时间是必不可少的。
DBIx::Class 被我排除在外,因为它加载了大约 1.6 秒(因为它加载了数据库的 所有 表的 Perl 定义,所以很长)显然太多了。
Class::DBI 的加载速度有多快?我的主要问题:当我们使用Class::DBI 时,Perl 是否会加载有关所有可用表的信息(如DBIx::Class),还是仅为我们实际使用的这些表加载 Perl 定义?
以下是加载 1.6 秒的 DBIx::Class 代码:
#!/usr/bin/perl
package MyApp::Schema;
use lib '.../ORMs/dbix-class';
use base qw/DBIx::Class::Schema/;
__PACKAGE__->load_namespaces();
1;
(架构是自动生成的。)
有什么方法可以加快速度吗?如何在不加载所有表的情况下使用它?
【问题讨论】:
-
为什么不切换到快速 CGI?用最少的努力,这 1.6 秒就变得无关紧要了
-
如果您向我们展示您使用 DBIx::Class 的代码太慢,这可能会很有用。使用模式信息初始化 DBIx::Class 有不同的方法,并且不需要加载所有表。您还可以只为您关心的应该更快加载的表设置静态定义。
-
@ikegami 如果他们在共享托管环境中,他们可能无法做到这一点。
-
@GrantMcLean 请解释如何在不加载所有表的情况下初始化
DBIx::Class。我已经编辑了问题