Составить представление о различных программных продуктах и технологиях можно, знакомясь с обзорами в компьютерных изданиях. Однако чем толще ваш кошелек, тем труднее понять, что все-таки выбрать. Для верности хорошо бы провести системный анализ продуктов, включающий различные виды математического и имитационного моделирования их поведения в различных ситуациях. Но для этого потребуются не только деньги, но и время. Предлагаем один из подходов к выбору технологии. Сравните свои потребности с возможностями существующих систем.
Имейте в виду, что со временем, при постоянно растущем объеме хранимой информации и увеличении числа пользователей, реакция системы становится хуже. Поэтому выбирайте систему с учетом не только сегодняшних, но и будущих задач.
Как в общем виде выглядит процесс взаимодействия пользователя и некоторого хранилища данных? Образно говоря, между пользователем и нужными ему данными находится как бы "черный ящик". Рассмотрим его содержимое с точки зрения решения конкретной задачи разными СУБД.
Скажем, нужно получить на экране монитора некий график. Задача решается в три этапа:
- извлечение данных из одного или нескольких файлов;
- отбор из них нужных;
- обработка отобранных данных и построение на их основе графика.
Любая СУБД справится с этой задачей, но по-разному.
База данных на мэйнфрейме. Эта технология исторически появилась первой, поэтому мы ее и приводим. Извлечение данных и обработка происходит на одной машине. Пользователь получает на экране уже готовую информацию.
Технология файл-сервер. С появлением сетей данные стали хранить на файл-сервере. В этом случае их поиск и обработка происходят на рабочих станциях. При таком подходе на рабочую станцию присылаются не только данные, необходимые конечному пользователю, но и данные, которые будут использваться только для выполнения запроса (например, фрагменты индексных файлов или данные, которые будут отброшены при выполнении запроса). Объем такой "лишней" информации может быть значительно большим, чем объем информации "нужной".
Время реакции на запрос пользователя будет складываться из времени передачи данных с файл-сервера на рабочую станцию и времени выполнения запроса на рабочей станции. Чтобы время реакции такой системы было приемлемым, надо ускорить обмен данными с диском и нарастить объем оперативной памяти для кэширования данных с диска (например, при работе с Novell или Windows NT). Также необходимо в качестве рабочей станции использовать мощный компьютер. Узким местом может оказаться сетевая среда, поэтому пропускная способность сетевой шины - тоже немаловажный показатель. Если увеличивается число одновременно работающих пользователей и объем хранимой информации, размер пересылаемой информации растет, т. е. растет сетевой трафик. И как результат, время реакции системы очень быстро падает. Такая технология подразумевает, что на каждой рабочей станции находится свой экземпляр СУБД, работающий с одними и теми же данными. Взаимодействие этих СУБД для синхронизации работы через промежуточное звено в виде файл-сервера приводит к дополнительным потерям (в том числе из-за необходимости передавать дополнительную информацию).
Технология клиент-сервер. Одна СУБД для всех пользователей, расположенная на сервере, - это технология клиент-сервер.
При такой технологии программа пользователя (клиент) формирует запрос на отбор данных и отсылает запрос серверу. Сервер отбирает данные, соответствующие выполняемому запросу, и отсылает их программе-клиенту. Программа-клиент обрабатывает полученные данные и представляет их на экран пользователю. В этом случае объем передаваемой информации, а значит, и сетевой трафик значительно ниже, чем при использовании файл-сервера. Логично было бы ожидать, что и общее время отклика должно сократиться.
Однако время реакции в такой системе складывается из времени передачи запроса, времени ожидания ресурсов на сервере (например, процессора или дисковой операции), времени выполнения запроса и времени передачи результатов на рабочую станцию - программе-клиенту. Причем время ожидания ресурсов на сервере может съедать львиную долю общего времени выполнения запроса, поскольку сервер работает по принципу: "Вас много, а я один". При разработке программ, работающих по технологии клиент-сервер, придется учитывать эту особенность (например, не обращаться к серверу за каждой записью из отобранных, а читать данные сразу большими "пачками").
Если сетевой трафик при технологии клиент-сервер уменьшается, то узким местом становится компьютер, выполняющий роль сервера. Один Pentium-100 обработает меньше запросов, чем сто 386-х компьютеров. Сервер БД не только занимается чтением данных с диска (как это делает файл-сервер), но и выполняет все запросы пользователей, что отнимает значительную часть ресурсов. Поэтому требования к компьютеру, выполняющему роль сервера БД, значительно выше, чем требования к компьютеру для файл-сервера. Соответственно, чтобы уменьшить время реакции такой системы, в качестве сервера необходимо использовать мощный компьютер, мощность рабочих станций при этом увеличивать не обязательно.
Передача данных. Лучше или хуже будет работать та или иная технология, зависит от размеров БД, характера и интенсивности запросов, соотношения производительности аппаратных средств и некоторых других факторов.
Технологию клиент-сервер можно сравнить с гардеробом в театре, где каждый зритель передает гардеробщику номерок (запрос) и получает свое пальто (результат выполнения запроса). Технология с использованием файл-сервера - это скорее школьная раздевалка, куда врывается ватага школьников (несколько СУБД), и каждый, толкаясь, забирает свое пальто (данные).
При выборе технологии не последнюю роль играют возможности реализации контроля целостности БД, проверка ограничений, налагаемых на информацию, обеспечение безопасности и разграничение прав доступа к данным. В технологии файл-сервера этими задачами должен заниматься каждый экземпляр СУБД на каждой рабочей станции. В технологии клиент-сервер этими задачами занимается единственный экземпляр СУБД - сервер базы данных.
Использование в качестве связующего звена между компьютерами низкоскоростных линий связи (например, связь по модему) может стать определяющим в выборе технологии. Технология клиент-сервер в этом случае будет предпочтительней, чем технология, основанная на применении файл-сервера.
Формирование запросов. Поиск данных, их обработка и формирование ответа (скажем, получение какого-либо графика) осуществляются с помощью специальных прикладных программ. Для работы с реляционной базой данных запросы обычно формируются на языке SQL (Structured Query Language). Это связано с тем, что этот язык де-факто является с 1976 г. "межгалактическим стандартом" (а с 1987 г. де-юре) и реализован для большинства СУБД, работающих в режиме клиент-сервер.
Кроме того, программы, работающие с базой данных в режиме клиент-сервер, используют и некоторый программный интерфейс для посылки запросов серверу и получения от него ответов. Этот интерфейс зависит от базового языка программирования или может быть "спрятан" в драйвере связи с БД (например, в драйвере ODBC, IDAPI).
Для того чтобы сравнить программирование приложений по технологии файл-сервер и клиент-сервер, рассмотрим работу СУБД HyTech. В этой СУБД возможно реализовать приложения, работающие как в одной, так и в другой технологии. Использование языка SQL для манипуляции данными в СУБД HyTech дает возможность со сравнительно небольшими затратами переносить приложения из одной технологии в другую, не принимая во внимание проблемы, связанные с изменением языка программирования или с изменениями функциональных возможностей различных СУБД.
Организация информации в СУБД HyTech - реляционного типа. Вся информация базы данных хранится в таблицах.
Применение языка SQL для формирования запросов к данным является мощным средством по сравнению с каким-либо универсальным языком высокого уровня. Оператор SQL работает не с отдельной записью, пусть и в цикле, а с частями таблиц, как с единым целым. Используя эту особенность, можно формировать достаточно сложные запросы к нескольким связанным таблицам с помощью небольшого по объему текста.
Чтение информации. Чтобы отобрать информацию из таблицы, используется оператор SELECT. Этот оператор указывает:
- из какой таблицы отбирается информация;
- какие именно записи отбираются;
- какие именно столбцы отбираются.
Например, надо отобрать сведения о зарплате Иванова:
select fio, month, money
from FIO
where fio="Иванов';
Здесь:
- после ключевого слова SELECT указаны отбираемые столбцы;
- после ключевого слова FROM указана таблица, из которой отбирается информация;
- после ключевого слова WHERE указано условие для отбора записей из таблицы.
Если нужно отобрать все записи из таблицы, то SQL-оператор для этого упростится: не надо указывать условие отбора:
select fio, month, money
from FIO;
Более сложный запрос: получить зарплату Иванова за январь:
select money
from FIO
where fio="Иванов" and month=1;
Еще более сложный запрос: найти все пары из двух человек X и Y (это может быть и один человек), у которых в одном месяце была зарплата X0 и Y0, а в другом месяце была зарплата Y0 и X0 (т.е. X и Y поменялись зарплатой):
select a.fio, a.month, b.fio, b.month, b.money,
from FIO a, FIO b, FIO c, FIO d
where b.month=a.month and c.money=a.money and d.month=c.month and d.money=b.money;
Вставка записей. Чтобы добавить запись в таблицу, нужно использовать оператор INSERT. В этом операторе указывается:
- имя таблицы, в которую добавляется запись;
- список значений и список полей, в которые эти значения заносятся.
Например, надо добавить сведение о зарплате Иванова (поле fio) за апрель (поле month должно быть равным 4); его зарплата составила 400 руб.
insert into FIO (fio, month, money)
values ("Иванов",4,400);
Изменение записи. Для изменения записи в таблице применяется оператор UPDATE. Этот оператор определяет:
- таблицу, в которой изменяются записи;
- условие, по которому отбираются записи для изменения;
- поля, значения которых изменяются, и новые значения для этих полей.
Как и в операторе SELECT, если опустить условие WHERE, то будут изменены все записи.
Удаление записи. Для удаления записей из таблицы используется оператор DELETE. Этот оператор определяет:
- таблицу, из которой надо удалить записи;
- условие для отбора записей, которые будут удалены.
Как и в операторе SELECT, если опустить условие WHERE, то будут изменены все записи.
Создание новой таблицы. Для создания новой таблицы используется оператор CREATE TABLE. С его помощью задается:
- имя создаваемой таблицы;
- имя каждого поля в этой таблице;
- тип данных, которые будут храниться в этих полях;
- размер каждого поля;
- ключевые, уникальные поля.
При переходе с файловой технологии на технологию клиент-сервер текст программы запроса с точки зрения программиста меняется мало (см. листинг). В идеальном случае все может свестись к простой перекомпиляции приложения или подключению иного драйвера для доступа к данным. Однако может оказаться, что при смене технологии приложение стало работать иначе, а зачастую хуже. Это вызвано тем, что изменились временные соотношения при выполнении различных операций. Например, в технологии файл-сервер можно безболезненно считывать данные небольшими порциями, не заботясь о времени этой операции. В технологии клиент-сервер считывание одной или нескольких записей занимает примерно одинаковое время. Однако при некоторой загрузке сервера БД время чтения будет меньше по сравнению со временем ожидания этого чтения. В этом случае выгоднее становится читать данные большими порциями.
Другое дело - контекстный поиск. В технологии файл-сервер можно, читая данные и зная, какую часть данных уже обработали, выводить пользователю прогресс-индикатор. В технологии клиент-сервер запрос обрабатывается на сервере БД, и ход выполнения процесса отследить намного сложнее. Однако сам запрос может выполняться значительно быстрее, и необходимость такого отслеживания может отпасть сама собой.
Как видно из этих примеров, учет особенностей технологии, в частности ее временных характеристик, может привести (и приводит) к изменению логики работы с данными, а в худшем случае приводит к тому, что приходится изменять сценарий диалога с пользователем.
В настоящее время на практике используется большое количество продуктов, предназначенных для создания (проектирования) различных приложений технологии клиент-сервер. Несмотря на то что доступ к данным при написании таких приложений частично скрыт, проблема обеспечения эффективности доступа к данным и выбора соответствующей технологии остается.
Одним из путей решения этой задачи является разделение задачи доступа к данным и задачи обработки и представления данных на экране. В СУБД HyTech доступ к данным осуществляется через специальные программные модули, реализующие некоторый универсальный интерфейс доступа и работы с данными (например, драйверы ODBC, IDAPI).
Однако и в этом случае остается учет особенностей технологии доступа к данным при проектировании приложений.
* * *
Итак, ваша СУБД может быть любой. Главное, чтобы она соответствовала вашим задачам, кошельку и нервной системе.
Андрей Малярский, Влад Неплохов и Владимир Хруст работают программистами в фирме "Сказ-М". Контактный телефон: (095) 188-84-92.