2014-09-24 2 views
3

Интересно, какие преимущества и недостатки используются друг над другом. Этот вопрос возник из рекомендации, которую я получил здесь: Allocate buffer dynamically for DB query according to the record actual size
Я ищу список важных отличий (а не исчерпывающий список), которые помогут мне принять обоснованное решение. У меня есть опыт работы с win32 :: odbc и я могу подтвердить это по-настоящему. Это будет очень полезно, если кто-то сможет поделиться своим опытом поверх «сухих» документированных деталей.DBD :: ODBC vs win32 :: odbc

Дополнительная информация: Автор Win32 :: ODBC писал здесь: http://www.roth.net/perl/odbc/docs/ODBC_Docs.htm - «Есть несколько альтернатив Win32 :: ODBC доступны такие, как версии DataBase Interface (DBI) называется DBD :: ODBC Это расширение ODBC Perl. доступен на разных платформах, таких как Mac и UNIX. Это хороший инструмент для использования в ODBC-доступе в базы данных, хотя ему не хватает некоторых функций, которые имеет Win32 :: ODBC ». Интересно, знаете ли вы, какие функции у него отсутствуют.

ответ

4

Мои главные причины при переходе на стек DBI - это гибкость и более широкая совокупность тестеров/отладчиков. С помощью DBI вы позволяете себе использовать драйвер, специально настроенный для вашего конкретного механизма базы данных. Да, большинство баз данных также предлагают драйвер ODBC, но некоторые специфические возможности могут быть недоступны или более сложны через этот конкретный API. Кроме того, DBI является независимой от платформы, что делает возможным последующий перенос в другую ОС, что значительно меньше проблем. Наконец, население людей, использующих DBI для доступа к базе данных , далеко превышает число, использующее Win32::ODBC, что означает, что ошибки могут быть найдены & исправлены быстрее.

Рассматривая другой связанный вопрос, я замечаю, что вы используете Oracle. Используя DBI, у вас будет выбор между использованием DBD::ODBC или DBD::Oracle под капотом. Вы можете сделать этот выбор простым изменением на один из параметров метода DBI->connect.

Если вы используете Instant Client от Oracle, то с помощью DBD::Oracle вы можете избавиться от проблем с загрузкой/установкой компонента ODBC на компьютерах, которым необходим доступ только через Perl. Конечно, удаление слоя ODBC из уравнения может также иметь преимущества.


Update: Win32 :: ODBC является относительно непосредственное преобразование ODBC Middleware API от C до Perl. Если вы хотите ограничить себя подключениями ODBC в Windows, это имеет относительно небольшое преимущество, заключающееся в том, что вы получаете более прямой контроль над уровнем промежуточного ПО ODBC, который контролирует вашу базовую базу данных. Это, конечно, не означает, что API ODBC особенно верен API и/или возможностям базовой базы данных.

Опять же, предполагая, что вы используете Oracle, вы, кажется, есть 3 варианта:

  • Win32::ODBC -> ODBC -> Драйвер Oracle для ODBC ~> Клиентский Oracle -> Сервер Oracle
  • DBI - >DBD::Oracle ~> Клиент Oracle -> Сервер Oracle
  • DBI ->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 также окажется в намного больше. Шутки в сторону.

+0

см. Мой отредактированный вопрос. Кроме того, где вы размещаете Win32 и DBI. Является ли Win32 :: ODBC другим модулем доступа к базе данных? Чем он отличается от DBI? –

+0

Громкий и ясный. @tjd Спасибо за ваши проницательные комментарии. –

Смежные вопросы