DBD::ODBC против win32::odbc
Интересно, каковы преимущества и недостатки использования одного над другим. Этот вопрос возник из совета, который я получил здесь: динамически выделять буфер для запроса БД в соответствии с реальным размером записи
Я ищу список важных различий (а не исчерпывающий список), которые помогут мне принять обоснованное решение. У меня есть опыт работы с win32::odbc, и я могу искренне засвидетельствовать об этом. Будет очень полезно, если кто-то сможет поделиться своим опытом с "сухими" документированными деталями.
Дополнительная информация: Автор Win32::ODBC написал здесь: http://www.roth.net/perl/odbc/docs/ODBC_Docs.htm - "Существует несколько альтернатив Win32::ODBC, таких как интерфейс базы данных (DBI) версия называется DBD::ODBC. Это расширение Perl для ODBC доступно на разных платформах, таких как Mac и UNIX. Это хороший инструмент для доступа ODBC к базам данных, хотя в нем отсутствуют некоторые функции, которыми обладает Win32::ODBC." Интересно, знаете ли вы, какой функциональности ему не хватает?
1 ответ
Мои главные причины, по которым я собираюсь DBI
Стек - это гибкость и более широкая популяция тестеров / отладчиков. С DBI
вы позволяете себе использовать драйвер, специально настроенный для вашего конкретного механизма базы данных. Да, большинство баз данных также предлагают драйвер ODBC, но некоторые специфические возможности могут быть недоступны или более проблематичны через этот конкретный API. Дополнительно, DBI
является независимым от платформы, что делает любое возможное в будущем портирование на другую ОС намного проще. Наконец, население людей, использующих DBI
для их доступа к базе данных намного превышает те, которые используют Win32::ODBC
Это означает, что ошибки могут быть найдены и исправлены быстрее.
Глядя на ваш другой связанный вопрос, я замечаю, что вы используете Oracle. С помощью DBI
у вас будет выбор между использованием DBD::ODBC
или же DBD::Oracle
под капотом. Вы можете сделать этот выбор, просто изменив один из параметров DBI->connect
метод.
Если вы используете Oracle Instant Client, используя DBD::Oracle
может избавить вас от необходимости загружать / устанавливать компонент ODBC на компьютерах, которым нужен только доступ через Perl. Конечно, удаление слоя ODBC из уравнения также может иметь преимущества.
Обновление: Win32::ODBC - это относительно прямое преобразование ODBC Middleware API из C в Perl. Если вы хотите ограничиться подключениями ODBC в Windows, это имеет относительно небольшое преимущество, поскольку дает вам более непосредственный контроль над уровнем промежуточного программного обеспечения ODBC, который контролирует вашу базовую базу данных. Это, конечно, не означает, что ODBC API особенно верен API и / или возможностям базовой базы данных.
Опять же, предполагая, что вы используете Oracle, у вас, кажется, есть 3 варианта:
Win32::ODBC
-> ODBC -> Драйвер Oracle для ODBC ~> Клиент Oracle -> Сервер OracleDBI
->DBD::Oracle
~> Клиент Oracle -> Сервер OracleDBI
->DBD::ODBC
~> ODBC -> Драйвер Oracle для ODBC ~> Клиент Oracle -> Сервер Oracle
Где '~>' находится справа от слоя, который должен был "переложить" один API, чтобы соответствовать другому.
Теперь я могу понять, если вы считаете, что API верность промежуточному программному обеспечению ODBC желательна. Лично я предпочел бы иметь гибкость DBI
и более короткий программный стек, используемыйDBD::Oracle
, Хотя я также предполагаю, что чем длиннее стекDBD::ODBC
подходит для 99+% всех потребностей, даже с двумя слоями прокладок.
Еще одно различие между DBI
&Win32::ODBC
в том, что вокруг DBI
стек. Целиком DBIx
пространство имен зависит от этого. Найдите каждый из этих модулей на metacpan.org и нажмите ссылку "Обратные зависимости" на их странице, и вы получите довольно четкое представление об относительной ценности, которую сообщество Perl присвоило каждому.
Так что, если вам нужна дополнительная, чисто эгоистичная причина: разработчик Perl с опытом работы с DBI также окажется в гораздо большем спросе. Шутки в сторону.