Теория СУБД
- Теория СУБД
- ЗА ТАБЛИЦАМИ — НАШЕ БУДУЩЕЕ!
- СВЯЗЫВАЕМ ДАННЫЕ
- ОБЪЕКТНЫЙ РАЙ
- ЛОКАЛЬНАЯ БАЗА
- СЕТЕВАЯ БАЗА ДАННЫХ
- КЛИЕНТ-СЕРВЕР
- ТРЕТИЙ УРОВЕНЬ
- ЛОГИКА
- ВИДЫ СТРУКТУР БАЗ
- ОБЗОР РЫНКА
- РАЗВИТИЕ ТЕХНОЛОГИЙ БД
- БАЗЫ ЗНАНИЙ И ЭКСПЕРТНЫЕ СИСТЕМЫ
- АНАЛИЗ ДАННЫХ И OLAP-ТЕХНОЛОГИИ
- ХРАНИЛИЩА ДАННЫХ И КОРПОРАТИВНАЯ ПАМЯТЬ
- ИСТОРИЯ РАЗВИТИЯ ИНТЕРФЕЙСОВ ДОСТУПА К БАЗАМ ДАННЫХ
- ЧТО ДАЛЬШЕ?
Базы данных существуют не в вакууме, а в окружении множества технологий. Люди общаются с БД через терминалы с помощью унифицированного языка, программы используют унифицированные технологии доступа. Все эти стандарты возникли не на пустом месте: они являются частью той истории, которую я сейчас расскажу.
АВТОМАТИЗАЦИЯ ПРОИЗВОДСТВА. ODBC
Сорок лет назад нормальное использование базы данных в подавляющем большинстве случаев можно было представить примерно так: оператор сидит за терминалом СУБД и вручную делает выборки. В скором времени автоматизация производства проникла и сюда: с началом внедрения автономных программных комплексов базы данных услуги человека-работника стали ненужными. На тот момент стандарты описывали лишь логику построения РБД и язык SQL, призванный стать унифицированным интерфейсом между человеком и СУРБД, но не между программой и СУРБД. Как и всегда в подобных ситуациях, в мире воцарился хаос: каждый производитель пытался протолкнуть свой программный интерфейс доступа и навязать его потребителю. Устав от этого бардака, наиболее сознательные производители объединились в группу SAG (SQL Access Group), которая занялась разработкой унифицированного CLI (Call Level Interface, а проще — "библиотека функций"), позволяющего приложениям работать с базами данных. Разработка оказалась удачной и была стандартизирована ISO и EIC. Стандарт ISO/EIC DBC CLI не слишком удобен и гибок по современным нормам, перегружен низкоуровневыми рутинными операциями, но он впервые позволил программистам писать системы, взаимодействующие с РБД, и малой кровью переносить их между базами различных производителей.
В 1992 году небезызвестная компания Microsoft с небольшим опозданием обратила внимание на популярность и востребованность технологий, связанных с реляционными базами данных. Завоевать этот сегмент рынка засильем своих технологий к тому времени уже не представлялось возможным, поэтому новый продукт компании основывался на ISO/EIC CLI и получил название ODBC — Open Database Connectivity. Проект ODBC отличался от своего предка расширенным набором функций и разделением на два компонента: ODBC-драй-веры, предоставляющие непосредственный доступ к БД, и ODBC-диспет-чер (менеджер) который с одной стороны управляет драйверами, а с другой взаимодействует с прикладным ПО. Такой подход позволяет ODBC-приложениям полностью абстрагироваться от специфики конкретной РДБ, легко переключаясь между ними даже в процессе работы.
КОФЕ. СОЛНЦЕ. БАЗЫ ДАННЫХ
Java-технологии компании Sun Microsystems тоже не оставили в стороне доступ к РБД. Разработка компаний JavaSoft и InterSolv была призвана удовлетворить потребность в DataBase Connectivity применительно к java-приложениям. Как и следовало , этот проект во многом опирался на опыт создания ODBC и получил похожее название — JDBC (Java DataBase Connectivity). Первые реализации JDBC по сути представляли собой java-обертку вокруг ODBC-библиотек. Я не хочу сказать, что это решение убого или не достойно внимания: подобная технология активно применяется в наши дни и ее принято называть "мост JDBC-ODBC". Однако позже появились системы, в которых java-технологии занимали чуть ли не ведущую архитектурную позицию, и вместе с ними появились и "чистые" реализации JDBC, которые представляли собой java-классы, способные самостоятельно общаться с СУРБД, то есть без помощи дополнительных ODBC-драйверов. И пусть это решение проигрывало по производительности JDBC-ODBC-мостам, но оно было незаменимо в системах, имеющих на борту JVM (Java Virtual Machine), но не располагающих родными ODBC-драйверами.
DAO И RDO
Для БД Microsoft Access был разработан специализированный БД-процессор Microsoft JET. Он предоставлял пользовательским приложениям интерфейс, отличающийся от ODBC ярко выраженной объектно-компонентной моделью, что позволило выполнить полноценную интерфейсную привязку не только к низкоуровневым языкам вроде C/C++, но и к менее гибким наподобие Visual Basic. Технология получила имя DAO -Data Access Object. Из-за тенденции унификации интерфейс DAO был расширен на многие БД помимо MS Access. Однако однозначная заточен-ность под JET вынуждала транслировать JET-команды в ODBC-инструкции (при доступе к не-Access БД), что снижало производительность. Пришлось разработать первичный binding ODBC в DAO-интерфейс, получивший название RDO (Remote Data Objects). Теперь при доступе к БД через ODBC больше не требуется производить замедляющую JET-ODBC-трансляцию. DAO-доступ через RDO принято называть DAO-ODBCDirect.
OLEDB
Понятно, что технология Object Linking and Embedding (OLE), которую агитаторы Microsoft когда-то активно продвигали в массы, не могла не повлиять на интерфейсы DBC. OLE DB предлагает концепцию, несколько отличающуюся от описанных выше методов. Здесь содержимое БД представлено в виде данных документа и публичного интерфейса приложения, способного обработать этот документ (собственно, это и есть стандартная для OLE модель). С одной стороны, это мало похоже на привычные модели с запросами данных и возвратами результатов, а с другой — позволяет осуществлять привязки OLE DB к не-SQL (и даже к не-реляционным) базам данных. СУБД должна предоставить свой публичный OLE-интерфейс для работы с данными, и тогда можно будет использовать через OLE-DB. Есть и другой (весьма популярный для SQL РБД) метод — OLE DB-надстройка над механизмами ODBC.
ADO
Серверы интерфейсной автоматизации тоже оставили свой след на многострадальном теле DBC. В эпоху расцвета CORBA, DCOP и прочего Microsoft продвигала свое видение операционно-объектного интерфейса по имени COM (Common Object Methods). Детище концепций COM/DCOM получило имя ADO -ActiveX Data Objects. ADO не оснащено средствами для работы с различными БД напрямую. Вместо этого используются объектные платформы DAO/RDO и OLE DB, обретающие COM-привязки в лице ADO-интерфейса.
ADO+ AKAADO.NET
Конечно же, не обошлось без пришествия .NET в стан DBC. На самом деле (по крайней мере, если верить заявлениям Microsoft) ADO.NET и ADO имеют лишь одинаковые названия и их программные интерфейсы слегка похожи. ADO.NET базируется на полностью переработанном движке, имеющем существенные отличия в плане возможностей. Во-первых, это, ясное дело, интеграция с .NET Framework. Во-вторых — тесная интеграция с XML. Этим, похоже, сейчас болеют все и впихивают этот самый злосчастный XML куда надо и не надо. И третьей отличительной чертой ADO.NET от ADO является поддержка модели доступа к несвязанным данным. На практике это означает, что приложение может отсоединяться и присоединяться к БД практически в произвольном порядке, что больше похоже на транзакции в WWW-сессии, чем на старый стиль запроса и получения данных в рамках одного неделимого соединения.
НЕ MICROSOFT'ОМ ЕДИНЫМ. BDE
В 1990 году компания dBase (а вместе с ней и БД dBase, и Paradox) перешли в собственность Borland. В то время даже БД, заявленные как работающие с одинаковыми форматами, были несовместимы друг с другом из-за уймы мелких различий. Таким образом, у Borland в наличии оказались две несовместимых БД, на развитие и поддержку которых требовались удвоенные усилия. Выходом из создавшейся ситуации была разработка модели ODAPI 1.0 — Open Database Application Programming Interface, позволявшей единообразно обращаться к БД dBase и Paradox посредством механизма QBE (Query By Example). Вскоре были разработаны дополнения, подрастившие ODAPI до версии 1.1 и позволившие общаться в том же стиле с Interbase, Oracle, Sybase и MS SQL. В версии 2.0 ODAPI превратилась в IDAPI (перестала быть "открытой" и стала "интегрированной"), проект заметили, им заинтересовались крупные корпорации вроде IBM, Novell и Wordperfect. Появилось локальное SQL-ядро, позволяющее работать с локальными файлами БД без самой СУБД, и IDAPtor — мост между IDAPI и ODBC. Дожив до версии 3.0, IDAPI стала 32-разрядной и сменила имя на BDE (Borland DataBase Engine). С тех пор BDE так и не изменила логической структуры, а только обросла новыми драйверами и мостами взаимодействия с современными DBC-технологиями.
зитивные моменты предшественника, исправить недостатки и привнести новые достоинства. Одним из ключевых моментов можно считать интерес Borland к UNIX-платформам и абсолютную платформенно-архитектур-ную непереносимость BDE (в Kylix нет BDE). Также dbExpress имеет легкую модульную архитектуру, открытую к дополнениям (основа весит 500 Kб против почти десятимегабайтного монолита BDE). Конфигурация вынесена из реестра в удобочитаемые текстовые файлы, а большинство основных интерфейсных объектов обзавелось немалым количеством механизмов тонкой настройки.
ODBC НА ПРАКТИКЕ
Голая теория и употребление заумных аббревиатур — это, безусловно, хорошо. Но хотелось бы знать, как именно происходит ODBC-доступ клиентских приложений к базам данных. Выглядит это приблизительно так: каждый производитель РБД, заявляющий ODBC-поддержку под определенную операционную систему, предоставляет вместе со своим продуктом ODBC-драйвер. На самом деле, это даже никакой не драйвер (потому что он не является частью ядра операционной системы), а самая обычная динамическая библиотека (к примеру, DLL в MS Windows или SO в Linux), код которой будет исполняться в пространстве обычного пользовательского процесса. Эта библиотека обязана включать в себя набор стандартизованных ODBC-функций (и может включать дополнительные возможности), с точками вызова которых и будет линковаться приложение. Эти функции обязаны сохранять декларированные имена и аргументные типы, а их алгоритмы "знают", как добиться требуемого результата от базы данных конкретного производителя. Таким образом, не меняя исходного кода и алгоритма работы приложения, а просто линкуя его с различными
BDE УМЕР. ДА ЗДРАВСТВУЕТ DBEXPRESS!
Несмотря на своевременное появление, удачные идеи и популярность среди программистов, BDE объективно сдает свои позиции более слабому и легковесному конкуренту — ODBC. На сегодняшний день BDE повсеместно считается устаревшей, тяжеловесной и неудобной в администрировании технологией. Borland официально заявила о прекращении развития и поддержки BDE в пользу более прогрессивного преемника — dbExpress. Новый механизм призван сохранить все по ODBC-библиотеками, можно безболезненно мигрировать из одной РБД в другую.
ДИСПЕТЧЕРИЗАЦИЯ ODBC-ХОЗЯЙСТВА
Предложенный метод абстрагирования от конкретных РБД безусловно хорош, но постоянная перелинковка ODBC-библиотек при переключении между различными базами — не самое интересное и заманчивое решение. Существуют методы, позволяющие подгружать динамические библиотеки на лету, но это довольно сложная область программирования. Для решения такой проблемы было выпущено такое решение, как ODBC-диспетчеры (или менеджеры). Диспетчер представлен своей собственной ODBC-биб-лиотекой, которая, на самом деле, является заглушкой и перегружает свои вызовы на вызовы конкретного ODBC-драйвера по требованию приложения. Естественно, что библиотека диспетчера расширена функциями, позволяющими переключаться между базами не вдаваясь в подробности динамической линковки "на лету". Также существует управляющий софт, который конфигурируется диспетчером, сообщает ему параметры и местоположение конечных ODBC-драйверов. Таким образом, приложению достаточно быть слинкованным с ODBC-библиотекой диспетчера, и ему сразу после этого становятся доступны все ODBC-драйверы, прописанные в системе. При этом приложение даже не оперирует понятием драйвера, а использует так называемые DSN (Data Source Name). Практически все современные ODBC-драйверы, поставляемые с базами данных, рассчитаны на управление диспетчером (что, конечно, не мешает в случае надобности линковаться с ними напрямую).
ФОРТОЧКИ И ODBC
В современных операционных системах от Microsoft компонент ODBC-диспетчера и некоторый набор
ODBC-драйверов уже входит в поставку дистрибутива. Доступ к диспетчеру осуществляется через панель управления посредством элемента "Источники данных (ODBC)" (папка "Администрирование"). При установке все ODBC-драйверы прописываются в системе, их список можно посмотреть во вкладке диспетчера "Драйверы". На базе установленных драйверов можно заводить DSN'ы — описатели соединения с базой данных, указывающие, помимо драйвера, специфичные для базы параметры. Именно этими DSN'ами и будет потом оперировать конечное приложение. Под акка-унтом администратора можно заводить системные DSN'ы, которые будут доступны всем пользователям. Непривилегированный пользователь может заводить пользовательские DSN'ы, доступные только ему. Остальные вкладки предназначены для отладочной трассировки, оптимизации подключений, совместного использования пользовательских DSN'ов и других специфических целей.
В качестве примера мы быстро и непринужденно настроим доступ к базам MySQL и PostgreSQL. Первым делом оправляемся на сайты произво дителей и скачиваем оттуда ODBC-драйверы вида myodbc-xxx.zip и psqlodbc-xxx.zip, после чего устанавливаем их с помощью setup'а и msi-сценария соответственно. Производители оправдали свои заявления о поддержке ODBC и действительно предоставили нам работающие драйверы. Запускаем диспетчер и убеждаемся, что наши драйверы появились в соответствующей вкладке. Теперь на вкладке "Системный/пользовательский DSN" жмем "Добавить", выбираем наш свежеустановленный MySQL/PostgreSQL-драйвер и заявляем, что "Готово". Теперь осталось настроить параметры соединения. Для обеих баз достаточно указать символьное имя DSN'а (которым будут оперировать приложения), сетевой адрес для соединения (который вполне может быть и localhost'ом) и конкретное имя базы данных (одна СУРБД может обслуживать несколько баз одновременно). Также можно указать пользователя "по умолчанию", его пароль и порт, на котором висит база, если он отличается от стандартного. Вот и все. Теперь поль зовательские приложения могут получать доступ к этим базам.
ODBC ДЛЯ ПИНГВИНА
В GNU/Linux нет встроенного ODBC-диспетчера, зато внешних — несколько. Немного опережая других, лидирует проект UNIX-ODBC (понятно, почему название именно такое). Схема его функционирования во многом похожа на схему его аналога из Windows. Настраивать его можно как с помощью различных графических frontend’ов, так и руками — через конфигурационные файлы, формат которых прост и понятен. С frontend’ами, я думаю, ты разберешься сам, а я покажу, как настраивать собственноручно. Настраивать будем все тот же доступ к базам MySQL и PostgreSQL. Для начала скачаем/соберем/установим из пакета ODBC-драйверы, представленные динамическими библиотеками lib-myodbc.so и psqlodbc.so, размещение которых произвольно и особой роли не играет. Теперь пропишем их в конфигурации ODBC-диспетчера, обычно это файл /etc/odbcinst.ini :
]
Description = ODBC for MySQL Driver = /usr/lib/libmyodbc.so FileUsage = 1
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbc.so
FileUsage = 1
Теперь осталось создать DSN'ы на базе прописанных
драйверов. DSN'ы обычно хранятся в файле
/etc/odbc.ini :
[MAWD]
Driver = MySQL
SERVER = my.host.ru
DATABASE = newantispam
UID =
PWD =
PORT =
[elfbilling] Driver = PostgreSQL Database = elfbilling Servername = 172.16.1.1 Description = ELF Billing UID = PWD = Port = 5432
И вот уже соединения настроены. Проверить их можно тут же с помощью маленького SQL/ODBC-клиен-та, который обычно входит в пакет UNIX-ODBC и называется isql. Формат его вызова таков:
isql isql elfbilling vasya lovesexgod
Если выскочило приглашение ко вводу SQL-запроса, значит, соединение прошло удачно.
Как видишь, ничего сложного в настройке UNIX-ODBC нет, если понимать, что делаешь (а без этого я советую вообще ничего не делать).