Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Ю. А. Григорьев, Г. И. Ревунков - Банки данных

.pdf
Скачиваний:
323
Добавлен:
10.02.2015
Размер:
7.54 Mб
Скачать

13. Выбор общесистемных пакетов

EXEC SQL declare acur cursor for

select остаток from счет where HOMep=:s;

/* открыть курсор и выполнить запрос к БД*/ EXEC SQL open acur;

/* получить остаток */ EXEC SQL fetch acur into :d; if (SQLCODE!=SQL_OK) {

/* произошла ошибка, направить в VIEW-буфер сообщение об ошибке */ strcpy(transv->ermsg, «ошибка при чтении остатка и таблицы СЧЕТ»); EXEC SQL close acur;

tpreturn(TPFALL, 0, transb->data, sizeof(struct aud), 0);

}

else{

/* операция поиска выполнена успешно */ EXEC SQL close acur;

transv->ocTaTOK=d;

tpreturn(TPSUCCESS, 0, transb->data, sizeof(struct aud), 0);

}

}

Мультиплексирование запросов к базам данных. Tuxedo System мож­ но рассматривать как своеобразный программный мультиплексор запросов к базам данных.

Принципы обращения клиентов приложения к БД в системах, опи­ рающихся на менеджеры транзакций, совершенно иной, чем в двухзвенных системах «SQL-клиент—SQL-сервер». В последних существует понятие одновременных подключений к БД (concurrent connection). Процесс клиента считается подключенным к СУБД, начиная с момента открытия сеанса с БД (инициируется оператором CONNECT) и заканчивая его закрытием. Опера­ ция CONNECT является ресурсоемкой, выполняется медленно и не реко­ мендуется для частого использования. В течение сеанса СУБД считает кли­ ента активным и вынуждена хранить контекст его подключения даже в том случае, если клиент вообще не направляет запросов СУБД, а выполняет свои внутренние функции или, может быть, ушел пообедать. Схема взаимо­ действия клиента и сервера БД выглядит следующим образом: клиент и сервер открывают SQL-канал на весь период работы клиента (инициирует открытие канала клиент) и обмениваются по нему SQL-запросами и данны­ ми в синхронном режиме. В лицензионном соглашении на использование СУБД под количеством пользователей, от которого зависит стоимость ли­ цензии, подразумевается число одновременных подключений к СУБД кли­ ентских процессов. Возможны вариации (для различных СУБД лицензион­ ное соглашение выглядит по-разному), но суть остается одной.

Совершенно иначе выполняется подключение клиентов в системах с трехзвенной архитектурой. Клиент вообще не обращается к базе данных —

290

13.2. Варианты выбора распределенной СУБД

он ее «не видит». Клиент обращается с запросами к серверу приложений в одном из допустимых режимов. Взаимодействие клиента и сервера прило­ жений контролирует Tuxedo System/T. Подключение к System/T (начало сеанса) выполняется вызовом tpinit(), терминирование связи (завершение сеанса) производится вызовом tpterm().

Подключение клиентов к СУБД выполняется сервером приложений, а взаимодействие с БД (выборка, обновление) проводится в рамках сервисов. Схема работы выглядит следующим образом. Клиент приложения подклю­ чается к Tuxedo System/T, формирует исходные данные в буфере и вызыва­ ет сервис, передавая ему данные в буфере. Сервис, в свою очередь, извлека­ ет данные из буфера и формирует SQL-запрос, который направляется соот­ ветствующему менеджеру ресурсов (СУБД). Получив от него данные, сер­ вис размещает их в результирующем буфере и направляет его клиенту. Единственные исполнители прикладных действий — сервисы — не моно­ полизируются каким-либо клиентом, а доступны для общего использования всеми клиентами. При каждом вызове сервиса создается внутренний поток в рамках процесса, содержащего сервис.

Таким образом, для систем с трехзвенной архитектурой, работающей под управлением Tuxedo, не существует ограничений на число клиентов. Это и объясняет применение менеджеров транзакций (и Tuxedo в том числе) для систем, характеризуемых сверхбольшим числом клиентов (от сотен до тысяч). Кроме того, в системах с трехзвенной архитектурой резко сокраща­ ется число одновременных подключений к СУБД (что существенно умень­ шает стоимость лицензии на ее использование). Как уже говорилось, клиен­ ты к СУБД не подключаются. Подключение к СУБД производится процес­ сом сервера приложений (от каждого процесса по одному подключению). Каждый такой процесс одновременно обрабатывает N запросов, поступаю­ щих от клиентов. А количество лицензионных подключений к СУБД опре­ деляется общим числом процессов (серверов), включенных в приложение, и не зависит от числа обрабатываемых в текущий момент запросов от клиен­ тов. Опубликованные данные свидетельствуют о том, что количество под­ ключений к СУБД в системе с трехзвенной архитектурой по сравнению с традиционной технологией применения СУБД может быть уменьшено в 4—16 раз, а выигрыш в стоимости от приобретения менеджера транзакций и СУБД по сравнению с приобретением только СУБД с лицензией на большее число пользователей может достигать 50 %.

Интероперабельность распределенных СУБД: возможность соз­ дания разнородной информационной среды. Шлюзы для доступа к раз­ нородным базам данных. Как отмечалось, шлюзы обеспечивают возмож­ ность приложений, созданных средствами разработки данной СУБД, опери­ ровать над БД в «чужом» формате так, как будто это собственные БД.

На рис. 13.8 представлена схема организации гетерогенной среды с помощью шлюза OmniConnect фирмы Sybase.

291

 

13. Выбор общесистемных

пакетов

Server

Server

Server

Oracle

Sybase

Informix

Шлюзовой

OmniConnect

Шлюзовой

компонент

 

компонент

Sybase

 

Sybase

ж

 

Ж

SQL

WS

Рис. 13.8. Связь разнородных СУБД с помощью шлюза OmniConnect

OmniConnect хранит информацию о размещении таблиц на том или ином сервере БД. Централизованно хранятся и исполняются глобальные хранимые процедуры. Приложение-клиент может осуществлять транзакции, в которых участвуют таблицы из различных БД, а также выполнять проце­ дуры, которые OmniConnect при работе с СУБД, отличными от Sybase, пре­ образует к соответствующему диалекту SQL.

На рис. 13.9 приведена схема организации связи разнородных СУБД с помощью шлюза Informix-Enteфrise Gateway фирмы Informix.

Шлюз Informix-Enterprise Gateway обеспечивает для инструменталь­ ных средств и приложений БД, выполняемых под управлением операцион­ ной среды Unix или MS Windows, доступ к информации, хранящейся в БД — более 60 типов (среди которых Oracle, Sybase, Ingres, Adabas, IMS, VSAM, CA-IDMS и др.). Поддерживаемые операционные системы — Unix, MVS, VM, VMS. Доступ реализуется при помощи программных продуктов Enter­ prise Data Access SQL (EDA/SQL) компании Information Builders. Шлюз позволяет выполнять распределенные соединения таблиц из разнородных БД и импортировать «чужие» данные в БД Informix.

Enterprise Gateway выполняется как процесс сервера СУБД Informix, который конвертирует запросы клиентов Informix в запросы EDA/SQL. Ко­ гда от клиентского приложения поступает инструкция SQL или удаленный вызов процедуры, предназначенный для Enterprise Gateway, то он перена­ правляется на EDA/SQL Server, который обращается к соответствующим реляционным или нереляционным источникам данных. Данные, полученные от EDA/SQL Server, Enteфrise Gateway возвращает приложению клиента.

292

J3.2. Варианты выбора распределенной СУБД

Server

Server

 

Server

Oracle

 

Informix

 

Sybase

 

 

Informix-

 

 

EDA/SQL

Еп1ефг18е Gate­

 

 

way

 

EDA/SQL

7^

1

^

\

^—A

S(?L

WS

Рис. 13.9. Связь разнородных СУБД с помощью шлюза Infoпllix-Enteфrise Gateway

На рис. 13.10 представлена схема организации связи разнородных СУБД на базе шлюзов Oracle Transparent Gateways и Oracle Procedural Gateways.

Независимость от источников данных, как важная составляющая откры­ тости Oracle, реализована двумя наборами продуктов: Oracle Transparent Gate­ ways (прозрачные шлюзы) и Oracle Procedural Gateways (процедурные шлюзы). Прозрачные шлюзы обеспечивают доступ из SQL к БД и файловым системам

— DB2, Rdb, ADABAS,ГОМ8,IMS, SQL/DS, SQL/400, VSAM и плоским фай­ лам. Процедурные шлюзы реализуют интерфейс с мониторами транзакций, операционными системами и внешними приложениями из языка PL/SQL.

ОВВС-интерфейс доступа прплоэюений к различным серверам СУБД.

Фирма Microsoft разработала специальный интерфейс ODBC (Open Data­ Base Connectivity), позволяющий Windows-приложениям рабочих станций обращаться к различным СУБД, поддерживающим как модель сервера БД (Oracle, Sybase, Informix и др.), так и модель файлового сервера (dBase, Paradox) (рис. 13.11).

ODBC-интерфейс представляет набор функций для языка С, C++ и Visual Basic для Windows. Связь с СУБД осуществляется с помощью языка SQL (даже с СУБД, поддерживающими модель файлового сервера). С по­ мощью функции SQLConnect приложение может подключиться к различ­ ным СУБД. Далее в программе должна быть подготовлена строка с опера­ тором SQL. Функция SQLExecute выполняет этот оператор, обращаясь че­ рез ODBC-драйвер к требуемой СУБД. Оператор SQLFetch читает результа­ ты выполнения SQL-предложения в ПП.

Комплексы драйверов ODBC предлагают и независимые разра­ ботчики. Этот стандарт обеспечивает эффективные средства доступа к

293

 

13. Выбор общесистемных

пакетов

 

Server

 

 

 

Монитор

Oracle

 

 

транзакций

 

 

Server

 

Oracle

Server

 

 

PL/SQL

Informix

Сервис К

Procedural

 

Gateways

Sybase

 

 

 

Шлюзовой

 

Oracle

Шлюзовой

компонент

 

Transparent

компонент

Oracle

 

Gateways

Oracle

ж

 

 

Ж

SQL

WS

Рис. 13.10. Связь разнородных СУБД с мониторами транзакций с помощью шлюзов Oracle

БД и позволяет сократить сроки разработки программ. В настоящее время почти все реализации предназначены для клиентской части. Для крупных организаций это может означать сложности с распределени­ ем, конфигурацией и поддержкой ODBC на сотнях, а возможно, и ты­ сячах машин.

SQL3 — объектно-реляционное расширение языка SQL. Реляци­ онный подход, используемый в современных СУБД, имеет ряд преиму­ ществ:

реляционные БД построены на солидном теоретическом основании (теория реляционной алгебры);

реляционная технология подкреплена стандартами, которые одобре­ ны ISO и ANSI (SQL/89 и SQL/92).

В то же время можно отметить недостатки реляционной технологии.

1.Данные описываются только в виде таблиц, связи между таблицами должны быть явно указаны в ПП (конечно, желательно оформить эти про­ граммы в виде методов классов).

2. Реляционные БД предлагают ограниченное множество типов атри­ бутов (с помощью классов можно описывать произвольные типы классов).

3. Реляционная модель не позволяет рассматривать данные послойно, при необходимости отвлекаясь от ненужных деталей (при объектном под­ ходе в поле можно хранить ссылку на запись другой таблицы).

294

13.2. Варианты выбора распределенной СУБД

Oracle

Windows-приложение

dBase

Sybase

Informix

 

Менеджер драйверов

 

 

 

 

ODBCODBCODBC-

ODBC-

 

 

 

драйвер

драйвер

драйвер

драйвер

 

 

 

Oracle

Informix

Sybase

dBase

 

 

А

 

 

 

>

A

A

iл

А

Л

 

 

 

 

'I*

 

 

 

 

Рис. 13.11. Доступ Windows-приложений к различным СУБД

4.В реляционной модели усложнен интерфейс между языком про­ граммирования и языком баз данных: С-курсор-SQL (при объектном подхо­ де объекты встроены в язык программирования).

Перечисленные ограничения реляционной модели можно преодолеть

спомощью объектно-ориентированного подхода. Ниже перечислены ос­ новные свойства объектов (не только для СУБД).

1.Инкапсуляция — совокупность данных и операций (методов). Что­ бы активизировать объект, необходимо послать сообщение какому-либо его методу.

2.Наследование — возможность создавать из объекта новый объект, который наследует данные и методы своего предшественника. Например, объект Сотрудник (номер, местоработы, зарплата) может наследовать дан­ ные объекта Человек (пол, возраст, имя).

3.Полиморфизм — различные объекты могут получать одинаковые сообщения, но реагировать на них по-разному, в соответствии с их метода­ ми, реагирующими на сообщения. Например, на сообщение «нарисовать» объекты «прямая» и «окружность» отреагируют по-разному.

Некоторые СУБД (например, UniSQL 3.5 фирмы UniSQL) уже ис­ пользуют объектно-ориентированную МД, которая является расширением реляционной МД. Такие СУБД часто называют объектно-реляционными. Основой расширения служит примерная равнозначность схемы отношения (таблицы) и класса. Объектно-реляционная модель расширяет реляционную МД следующим образом:

• атрибутом может выступать ссылка на кортеж (запись) другого от­ ношения (таблицы);

295

13.Выбор общесистемных пакетов

расширение свойств отношений (к атрибутам добавляются методы);

каждая схема отношения (таблица) расширяется системным атрибу­ том, значение которого является уникальным идентификатором объекта;

классы (схемы отношений) организуют иерархию, исходя из соот­ ношения общее/частное (род/вид) между парами классов;

разрешается рекурсивно наследовать свойства класса всем его под­ классам. В подкласс можно добавлять дополнительные атрибуты и методы;

допускается доступ к атрибутам и методам класса только посредст­ вом сообщений.

Стандарт для построения объектно-реляционных СУБД определяет расширение языка SQL и называется SQL3. Рассмотрим особенности SQL3 подробнее.

Описание классов (инкапсуляция). Класс соответствует схеме отноше­ ния (таблице) реляционной модели. Класс можно описать двумя способами:

1.Описание класса Address:

create type Address (city char(30), state char(2), street char(30), house integer,

flat integer);

Объект Addr класса Address создается с помощью следующего оператора: create table Addr of Address;

2. Совмещенное описание класса Person и создание объекта People (экземпляра класса). Класс Person включает и описание методов:

create table People of new type Person

(

 

 

/* описание полей */

 

 

name char(30),

 

 

address Address,

/* ссылка на кортеж типа Address */

birthdate date,

 

 

/* описание методов (функций) */

age virtual,

/* функция age является виртуальной,

 

т.е. другая функция с тем же именем

 

может быть описана в подклассе */

function age (:р ref(Person))

/* параметр :р есть ссылка (ref)

 

 

на кортеж Person */

returns interval day;

 

/* функция возвращает возраст

begin

 

с точностью до дня */

 

 

return currentdate — :p.birthdate;

296

13.2. Варианты выбора распределенной СУБД

end;

);'

Наследование определяется с помощью фразы under. Ниже описан класс Employee, который наследует данные и методы класса Person. При обработке записей Employee используется метод age, описанный в этом подклассе, так как он представлен как виртуальный:

create type Employee under Person

(

 

 

/* описание полей */

 

 

salary float,

 

 

job char(20),

 

 

manager Employee,

/* рекурсивная ссылка на кортеж Employee */

/* описание методов (функций) */

 

age virtual,

/* функция age является виртуальной */

function age (:р ref(Employee))

/* параметр :р есть ссылка

 

 

(ref) на кортежemployee */

returns interval year;

/* функция возвращает возраст с точностью

begin

до года*/

 

 

 

return currentdate — :p.birthdate; end;

);'

Создание объекта Empl класса Employee: create table Empl of Employee;

Описание метода. Метод (функцию) можно задавать индивидуально для каждого кортежа (в операторе INSERT). Если метод описан как вирту­ альный, то при переходе к записям подкласса система автоматически пере­ ключается на одноименный метод, описанный в подклассе.

На рис. 13.12 представлено описание связей между объектами (табли­ цами) People, Empl и Addr.

Объектно-реляционный подход значительно расширяет возможности использования поисковых операторов. Рассмотрим два примера.

1. Использование путей и методов в операторе SELECT. Выдать име­ на сотрудников старше 50 лет, проживающих в Лондоне и имеющих управ­ ляющего по имени Джонс:

SELECT

e.name

FROM

Empl e /* e — это псевдоним объекта Empl */

WHERE

e.age>50 AND e.address.city='Лoндoн' AND

 

e.manager.name='fl^oHc';

297

13. Выбор общесистемных пакетов

People

Ссылка .

Addr

 

city

name

state

address - ^

street

age

house

flat

— Наследование

Empl Y

name address

salary job

_ manager

age(так как фун1сция описана как виртуальная)

Рис. 13.12. Связи между объектами примера

Здесь используют два пути (e.address.city и e.manager.name) для дос­ тупа по ссылке к полям других кортежей и метод age. При обращении к методу age система автоматически подставляет в качестве аргумента этой функции ссылку на текущий кортеж Empl.

2. Использование полиморфизма объектов. Выдать возраст всех со­ трудников с точностью до года, а остальных лиц, описанных в People, — с точностью до дня:

SELECT p.age FROM All People p;

Здесь All означает, что просматриваются кортежи класса (People) и подкласса (Empl).

Возможности технологии брокера объектных запросов. Брокер объектных запросов (Object Request Broker — ORB) — это строительные блоки, неоднократно используемые при разработке масштабируемых про­ граммных систем. В ORB реализуются методы, позволяющие одним объек­ там обнаруживать другие и обращаться к ним с запросами по сети, незави­ симо от платформы, на которой исполняется каждый из объектов, и от язы­ ков программирования, посредством которых они были созданы.

Консорциум производителей программного обеспечения Object Man­ agement Group (OMG) установил некоторые из ключевых стандартов, обес-

298

13.2. Варианты выбора распределенной СУБД

печивающих возможности взаимодействия объектов. Утвержденная им спе­ цификация CORBA (Common Object Request Broker Architecture) послужила основой для создания такими производителями, как IBM, Sun Microsystems, Hewlett-Packard, lona Technologies и ExperSoft, программных продуктов, благодаря которым корпоративные разработчики могут создавать распреде­ ленные объектные системы, включающие в себя и унаследованные прило­ жения.

ORB является одним из пяти основных видов программного обеспе­ чения промежуточного слоя. Остальные четыре: связи с БД (database con­ nectivity), системы распространения сообщений (Message-Oriented Middle­ ware — MOM), мониторы обработки транзакций (Transaction Processing (ТР) monitor) и системы, основанные на технологии удаленного вызова про­ цедур (Remote Procedure Call — RPC).

Подобно другим видам программного обеспечения промежуточного слоя, ORB в распределенных вычислительных системах с архитектурой клиент/сервер выполняет ту же роль, что и коммуникации в небоскребе. Обычно программное обеспечение ORB пишется на языке C++ и поддержи­ вает объекты, написанные на C++, Smalltalk и Java.

CORBA представляет собой среду для различных реализаций ORB, поддерживающих общие сервисы и интерфейсы (рис. 13.13), что обеспечи­ вает мобильность клиентов и объектов по отношению к различным реали­ зациям ORB и интероперабельность компонентов глобального объектного пространства.

Определения интерфейсов объектов могут быть помещены в репозиторий интерфейсов (Interface Repository), который представляет компонен­ ты интерфейсов для конкретных языков и обеспечивает доступ к объектам в период выполнения.

При формировании заявки клиент может использовать два интерфейса:

интерфейс динамического вызова;

стаб, генерируемый компилятором IDL (Interface Definition Language — язык определения интерфейсов); стаб (stab) — это локальная процедура вызова заданной операции при обращении к ней.

ORB ищет соответствующий код реализации объекта, посылает ему параметры заявки и передает управление (как правило, на другом узле). Реализация объекта принимает параметры заявки через сгенерированный компилятором IDL скелетон (skeleton) и при этом может обращаться к объ­ ектному адаптеру (Object Adapter) и ORB. Скелетон — это специфический для каждого интерфейса компонент ORB, служащий для передачи парамет­ ров заявок конкретным методам. Когда обработка заявки завершена, выход­ ные значения возвращаются клиенту. Объектный адаптер является основ­ ным средством взаимодействия ORB с реализацией объекта.

Различные ORB могут иметь разную реализацию и поддерживать раз­ личные объектные механизмы. В структуре ORB выделяется ядро, обеспе-

299