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 часто проще, чем ожидают люди, и, несомненно, оставит вас в лучшем положении.