Class::DBI - он загружает все таблицы?

У нас есть база данных 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;

(Схема генерируется автоматически.)

Есть ли способ сделать это быстрее? Как использовать его без загрузки всех таблиц?

1 ответ

Я действительно не рекомендовал бы Class:: DBI. Это не поддерживается в течение двенадцати лет - и были веские причины, по которым все перешли на DBIx:: Class.

Я очень рекомендую поработать над проблемой, которая приводит к тому, что вы все еще используете CGI. Что мешает вам, например, использовать CGI:: Emulate:: PSGI для тривиального преобразования вашего кода CGI в приложения PSGI, которые затем можно развернуть в постоянной среде, такой как FastCGI, или, что еще лучше, в качестве отдельной службы, к которой вы затем можете получить доступ используя nginx? Любое из этих решений означало бы, что время загрузки DBIx:: Class больше не является проблемой.

Очевидно, я понятия не имею, что держит тебя привязанным к CGI. Но, по моему опыту, переход на решение PSGI часто проще, чем ожидают люди, и, несомненно, оставит вас в лучшем положении.

Другие вопросы по тегам