вторник, 27 января 2009 г.

О процессоре баз данных среды программирования Delphi

Блогун - монетизируем блогиПотоки информации, циркулирующие в мире, который нас окружает, огромны. Во времени они имеют тенденцию к увеличению. Поэтому в любой организации, как большой, так и маленькой, возникает проблема такой организации управления данными, которая обеспечила бы наиболее эффективную работу.
С появлением ЭВМ и использованием их для обработки информации появилась возможность автоматизировать решение многих информационно - справочных и расчетных задач. Эти идеи нашли свое воплощение в системах управления базами данных (СУБД).
Роль СУБД как единого средства хранения, обработки и доступа к большим объемам информации постоянно возрастает. При этом существенным является постоянное повышение объемов информации, хранимой в БД, что влечет за собой требование увеличения производительности таких систем.
На сегодняшний день практически все языки программирования имеют расширения для работы с базами данных наиболее распространённых форматов.
На рынке программных средств появляются всё более сложные и совершенные разработки, которые имеют универсальное применение. Реклама производителей зачастую представляет предлагаемые новшества как наилучший вариант решения проблем. Но только является ли этот вариант на самом деле наилучшим? Перед программистом встаёт сложный вопрос выбора средства разработки.
Одним из таких средств является среда программирования Delphi.
Среда программирования Delphi предоставляет все необходимые инструменты для создания приложений работающих с базой данных.
Одним из достоинств программирования баз данных в Delphi является использование открытой архитектуры доступа к данным. Процессор баз данных Borland Database Engine (BDE), в основу которого положена технология интегрированной базы данных (Integrated DataBase API (IDAPI)), предоставляет возможность унифицированного подключения, как к локальным, так и к удаленным базам данных
Особенность архитектуры BDE обеспечивает ряд существенных преимуществ:
1. Реальное разделение программного кода и механизм доступа к данным. Причем сам доступ также осуществляется на нескольких уровнях-BDE, драйвера, сервера БД. Приложение Delphi для работы с БД можно настроить на использования с любой СУБД, для которой имеется соответствующий драйвер, буквально за несколько минут. При этом перекомпиляция самой программы не требуется. Плата за такую великолепную переносимость - скорость обмена данными через BDE и драйверы несколько меньше чем напрямую между приложением и СУБД.
2. Разделение драйверов и выделение в специальную группу драйверов для серверов SQL позволило гораздо полнее использовать функциональные возможности серверов БД, а применение единого API сняло остроту проблемы интерпретации процесса выполнения транзакций разными серверами.
3. BDE идеально подходит для создания приложений для архитектуры клиент/сервер, так как обеспечивает следующие функции:
-обработка запросов в диалоговом режиме
-представление через BDE вызовов операционной системы;
-модифицируемые запросы;
-поддержка хранимых процедур
-управление регистрацией пользователя
4. Все инструментальные средства баз данных Borland - Paradox, dBase, Database Desktop - используют BDE. Все особенности, имеющиеся в Paradox или dBase, “наследуются” BDE, и поэтому этими же особенностями обладает и Delphi.
5. Библиотека объектов содержит набор визуальных компонент, значительно упрощающих разработку приложений для СУБД с архитектурой клиент-сервер. Объекты инкапсулируют в себя нижний уровень - Borland Database Engine.
6. Предусмотрены специальные наборы компонент, отвечающих за доступ к данным, и компонент, отображающих данные. Компоненты доступа к данным позволяют осуществлять соединения с БД, производить выборку, копирование данных, и т.п. Компоненты визуализации данных позволяют отображать данные в виде таблиц, полей, списков. Отображаемые данные могут быть текстового, графического или произвольного формата.
7. Таблицы сохраняются в базе данных. Некоторые СУБД сохраняют базу данных в виде нескольких отдельных файлов, представляющих собой таблицы (в основном, все локальные СУБД), в то время как другие состоят из одного файла, который содержит в себе все таблицы и индексы (InterBase). Например, таблицы dBase и Paradox всегда сохраняются в отдельных файлах на диске. Директорий, содержащий dBase .DBF файлы или Paradox .DB файлы, рассматривается как база данных. Другими словами, любой директорий, содержащий файлы в формате Paradox или dBase, рассматривается Delphi как единая база данных. Для переключения на другую базу данных нужно просто переключиться на другой директорий. InterBase сохраняет все таблицы в одном файле, имеющем расширение .GDB, поэтому этот файл и есть база данных InterBase. \
Доступ к данным
TDataSet

TDBDataSet

TTable TQuery
Рис. 1Основой архитектуры доступа к наборам данных (рис.1) является базовый класс TDataSet, который содержит абстрактное представление записей и полей набора данных, инкапсулирующий управление, навигацию и манипулирование набором данных. Некоторые методы класса TDataSet могут быть переопределены с целью создания компонента, подключаемого к определенному физическому формату данных. Исходя из этого, класс TBDEDataSet определен как производный от класса TDataSet и является основным классом источников данных, он вводит такие концепции как BDE-базы данных и сеансы.
Класс TTable представляет структуру и данные, содержащиеся в таблице базы данных, знает, как обрабатывать индексы и применять специальные приемы, связанные с поддержкой отношений двух таблиц типа один-ко-многим. Класс TQuery – набор данных, содержащий информацию, возвращенную в результате выполнения SQL-запроса.
При помощи свойств и методов компонент, работающих с БД, осуществляется большинство механизмов доступа к данным, управление данными, их редактирование, выполняются различные манипуляции, и осуществляется интерфейс.
Используя самое простое приложение, работающее с базой данных, проведем эксперимент. Исследуем возможности и временя работы автономной базы данных, на основе BDE (Borland Database Engine), с использованием запросов.
Для экспериментального исследования возможностей работы БД будем использовать БД «Книги». Данная БД является реляционной, локальной, основана на BDE, состоит из четырех таблиц. Количество записей в БД генерируется автоматически.

Эффективность работы БД будем определять временем работы запроса с разным количеством записей.
Исследуем два различных типа запросов:
1. Запрос на выборку данных из БД. «Выбрать из базы данных все книги Уоррена и писателей, которые родились после 1900 года»
2. Запрос с использованием объединения таблиц. «Объединить таблицы и выбрать сказки Пушкина напечатанные в издательстве «Дрофа» »
Постепенно будем увеличивать количество записей в таблицах, и подсчитывать время работы запроса соответственно.
Количество записей в таблицах
10000
60000
110000
210000
300000
500000
1000000
1500000
Время работы запроса на выборку данных (сек)
0,18
1,35
2,6
5,3
11,8
22,11
90,11
177,52
Время работы запроса на объединение данных (сек)
0,52

2,37
4,74
9,6
24
56,3
135,14
Запрос не выполняется

При увеличении количества записей время выполнения запроса увеличивается. Кроме того, запрос с использованием объединения таблиц прекращает работу при количестве записей равных 1500000, и система выводит сообщение об ошибке. Система также выводит сообщение об ошибке «table is full (таблица заполнена)» при попытке заполнения таблиц более чем 1500000 записей. Полученные данные отражены на следующем графике.
При полученных результатах можно сделать следующие выводы:
1. Время выполнения запроса зависит от количества записей в БД и от сложности запроса. Чем больше записей в таблице и чем сложнее запрос, тем требуется больше времени на его выполнение;
2. Требуется достаточно большое количество времени на обработку запроса, что не эффективно в работе.
3. Таблицы имеют ограничение. В работе может использоваться не более чем 1500000 записей.
Т.о. при больших масштабах работы, в производственной сфере реляционная БД на основе BDE работает не эффективно, т. к требуется большое количество времени на обработку данных, и существует ограничение в количественном наборе данных.