Class :: DBI - он загружает все таблицы? - PullRequest
0 голосов
/ 27 июня 2018

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

0 голосов
/ 28 июня 2018

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

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

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

...