Многие наши автоматизированные процессы используют perl и нуждаются в доступе к нашим базам данных MySQL. Я ненавижу это признавать, но до недавнего времени мы не очень много сравнивали с большинством наших процессов. Один из наших разработчиков настроил тест, чтобы сравнить производительность "использовать MySQL" и "использовать DBI" со следующим псевдокодом:
for ($i = 1; $i <= 1000; $i++) {
pull and store all records in a 4,000 record table
}
Результаты: MySQL - 57s, 56s, 57s DBI - 43s, 42s, 43s
По какой-то причине я был удивлен, увидев, что DBI работает намного лучше; учитывая, насколько мало я знаю об одном из модулей. Я понимаю, что, вероятно, что-то не так с тестируемым эталоном и что все настройки/результаты идут очень, но мне было любопытно, получили ли другие опыт какой-либо производительности за счет использования DBI против модуля MySQL.
Я нашел MySQL модуль, на который он ссылается, был частью DBD:: mysql dist. Чтобы процитировать его
Как из Msql-Mysql-модулей 1.19_10 M (y) sqlPerl больше не является отдельным модуль. Вместо этого он эмулируется с использованием драйверов DBI. Вы сильно рекомендуется внедрять новый код с DBI напрямую.
Таким образом, уровень эмуляции является причиной потери вашей производительности. Также, что MySQL.pm
был удален в строке 4.x DBD:: mysql, последний появился в 2006 году.