Опарин Г.А. (oparin@icc.ru) - Институт динамики систем и теории управления Сибирского отделения РАН, г. Иркутск, Россия, Журавлев А.Е. () - , Богданов В.Г. () - , Феоктистов Д.Г. () - | |
Ключевое слово: |
|
Ключевое слово: |
|
|
Среди существующих в настоящее время СУБД на ПЭВМ не найдется такой, которая обладала бы всем необходимым комплексом средств и возможностей для удовлетворения разнообразных информационных потребностей сложных прикладных программных систем. Из общего числа недостающих возможностей, типичных для широко распространенных и часто используемых при создании приложений СУБД, можно выделить следующие, наиболее характерные: - слишком большие потребности в оперативой памяти у резидентного ядра СУБД, что существенно ограничивает в объеме само приложение (практика показывает, что применение при нехватке оперативной памяти оверлеев, виртуализация памяти и другие подобные методы только в ограниченных случаях дают удовлетворительные результаты); - отсутствие необходимого сочетания высокого уровня входного языка и приемлемой скорости при исполнении приложения; - отсутствие необходимого сочетания высокого уровня входного языка и открытости системы, возможности интеграции с другими программными системами и языками программирования на приемлемом уровне. Опыт работы авторов над крупными программными проектами убедительно показал, что наличие указанных недостатков у известных, широко распространенных СУБД существенно затрудняет их применение при создании сложных прикладных программных систем. С другой стороны, использование замкнутых, узкоспециализированных, недостаточно распространенных СУБД для достижения локальных целей препятствует эффективной разработке и дальнейшему развитию программного продукта, изолируя его от богатого выбором информационного, программного и инструментального окружений, так характерного для широкораспространенных СУБД с клонами (типичный пример - инфраструктура мощнейшей поддержки вокруг семейства xBASE). Решение авторами данной проблемы виделось в создании такой СУБД, которая с одной стороны была бы лишена перечисленных выше недостатков, а с другой - была бы совместимой хотя бы по входному языку и форматам файлов баз данных с семейством xBASE, обеспечивая себе тем самым широкую внешнюю поддержку. В результате была разработана СУБД под названием PQBASE ( Журавлев А.Е., Феоктистов Д.Г. СУБД для научных и инженерных приложений // Вычислительные технологии. -Новосибирск ИВТ СО РАН, 1993. - Т.2. - №6. - С.27-32.), описанию которой посвящена настоящая статья. ОСНОВНЫЕ ВОЗМОЖНОСТИ СУБД PQBASE позволяет без значительных усилий создавать на своей основе высокопроизводительные и в то же время достаточно компактные по объему занимаемой оперативной памяти прикладные программные продукты различного уровня сложности. СУБД PQBASE предоставляет возможность выбора языка для непосредственного программирования: - программирование на высокоуровневом языке, совместимом с xBASE; - программирование на языках С/С++, Паскаль, ФОРТРАН, ассемблера; - сочетание первых двух, насколько это позволяют указанные системы программирования. Совместимость на уровне входного языка (xBASE) в целом предопределяет основной круг возможностей СУБД PQBASE (функции высокого уровня для доступа к базам данных, управления диалогом, управление печатью и т.д.). Функциональные аналоги конструкций языка xBASE в сочетании со штатными возможностями языков ассемблера, С/С+ + , Паскаль, ФОРТРАН определяют круг возможностей СУБД PQBASE при использовании этих входных языков. Открытая архитектура СУБД PQBASE позволяет при необходимости вносить изменения и дополнения как на уровне входных языков, так и на уровне библиотек поддержки времени исполнения (PQBASE RUNTIME LIBRARY), a также способствует интеграции на различных уровнях как самой СУБД, так и созданных с ее помощью приложений с другими системами. Изначально высокоуровневый входной язык имеет значительное число расширений по сравнению с xBASE. Например, допускается прямое включение в текст программы фрагментов на языках С/С + и ассемблера. К функциональным возможностям xBASE добавлен ряд новых, касающихся в основном функций работы с базами данных. Вот некоторые из них: - эффективная система для хранения больших и сверхбольших объектов произвольной структуры; - защита целостности данных; - управление буферизацией. Планируется также добавить в PQBASE расширения, которые частично реализованы в последних версиях СУБД FoxPro и некоторых других из клона xBASE-совместимых: - регулярная поддержка отношений типа "один-ко-многим"; - оптимизация поиска по многим ключам и таблицам. При дальнейшем рассмотрении отдельных компонент СУБД PQBASE будут представлены некоторые дополнительные сведения о ее возможностях. ОБЛАСТЬ ПРИМЕНЕНИЯ СУБД PQBASE может применяться для создания на своей основе программ и программных продуктов практически для любых приложений, где требуется эффективное управление базами данных и/или достаточно развитая диалоговая надстройка над соответствующим функциональным ядром. СУБД PQBASE способна удовлетворять более жесткие требования по производительности и объему занимаемой памяти, открытости, степени интеграции с другими системами и языками программирования, оставаясь в то же время xBASE-совместимой по языку высокого уровня и формату баз данных. Это обусловливает легкость ее применения без необходимости повторного изучения языка и переделки имеющихся программ в сочетании с возможностью широкого использования практически всего спектра информационного, программного и инструментального окружений семейства xBASE-coвместимых продуктов. Кроме традиционных для xBASE областей применения, СУБД PQBASE путем введения дополнительных типов данных распространяет область своего применения на чисто вычислительные пакеты прикладных программ, САПР, АСУТП, системы реального времени, экспертные и другие системы различного назначения. СУБД PQBASE может использоваться: - для создания программного продукта "с нуля"; - как более эффективный конечный компилятор к xBASE-совместимым системам (dBASE, FoxBASE/FoxPro, Clipper и др.); - как средство для интеграции программ на xBASE с программами на других языках или для создания переносимого кода на другие платформы (другие ОС, ЭВМ). СТРУКТУРА СУБД PQBASE СУБД PQBASE содержит в своем составе 3 основных компонента (см. рисунок): 1) PQBASE OPTIMIZER - оптимизирующий компилятор с языка PQBASE (модифицированный вариант языка xBASE с расширениями Fox/Clipper и собственными расширениями PQBASE); 2) PQBASE TOOLKIT - интерфейс для доступа к функциям СУБД из традиционных языков программирования типа С/С++, ФОРТРАН, Паскаль, ассемблера; 3) PQBASE RUNTIME LIBRARY - библиотека поддержки времени исполнения. Открытая архитектура СУБД PQBASE обусловлена наличием полностью специфицированных интерфейсов на всех уровнях взаимосвязей между отдельными компонентами системы и с соответствующими внешними объектами (совместимые СУБД, компиляторы, линкеры). ОПТИМИЗИРУЮЩИЙ КОМПИЛЯТОР Оптимизирующий компилятор (PQBASE OPTIMIZER) предназначен для трансляции исходных PRG-программ в предельно эффективный и компактный код. Входной язык компилятора включает основные конструкции языков dBASE, Fox, Clipper, допускает прямые вставки фрагментов на Си и ассемблере, имеет ряд собственных расширений (PQBASE-расширения). В основе функционирования компилятора лежит многопроходная схема с использованием метода глобальной оптимизации, реализованного с учетом специфики языка xBASE. Глобальная оптимизация производится на основе семантического, структурного и статистического анализа как можно более полного текста исходной программы. Применение глобальной оптимизации направлено на устранение огромных накладных расходов, идущих на поддержку общности языковых конструкций в классе xBASE-подобных языков (языков интерпретируемого типа): как только общность удается устранить или ослабить, эффективность кода резко возрастает (до уровня языков типа Си или даже ассемблера). Теоретически участки с избыточной общностью в программе могут отсутствовать, и глобальная оптимизация не даст результата, однако на практике вероятность подобного случая очень мала. В процессе глобальной и локальной оптимизации используется целое сочетание конкретных методов и приемов. Перечислим некоторые из них: - определение типов переменных, возможных диапазонов их значений, вычисление константных выражений в процессе трансляции и упрощение, специализация и/или удаление на основе полученной информации выражений, конструкций и/или целых веток в программе; - выбор везде, где это возможно, вместо универсального метода трансляции некоторой языковой конструкции более специального метода, соответствующего конкретному употреблению данной конструкции (кейсинг); - другие, не зависимые от контекста эквивалентные преобразования и преобразования на основе знаний о контексте. Проблема отсутствия необходимой для проведения оптимизации информации, которую компилятор не может в принципе извлечь из компилируемой программы (в случае раздельно компилируемых модулей или в случае существования данной информации только на этапе исполнения), частично решается за счет автоматической или ручной подготовки дополнительных исходных данных для компиляции. Встречающиеся в исходном тексте инструкции ведения диалога и по работе с базами данных заменяются в процессе компиляции обращениями к функциям из библиотеки поддержки времени исполнения (PQBASE RUNTIME LIBRARY), что также способствует большей эффективности исполнимой программы по сравнению с FoxPro или Clipper. В результате откомпилированная в среде PQBASE программа иногда в 10 или более раз превосходит по скорости и компактности то, что можно получить с помощью FoxBASE/FoxPro или Clipper. После оптимизации PQBASE OPTIMIZER производит генерацию промежуточного кода на языке Си. Промежуточный код на языке Си отвечает требованиям стандарта ANSI и может самостоятельно найти применение, например для переноса в другие ОС (UNIX и т.д.) и/или на другие типы ЭВМ. На завершающей стадии компиляции для трансляции промежуточной Си-программы в PQBASE OPTIMIZER предусмотрен вызов соответствующего Си-компилятора фирмы MICROSOFT или BORLAND. Из полученного объектного файла можно собрать с'помощью линкера исполнимый ЕХЕ-файл, при необходимости используя другие объектные файлы (возможно полученные с других языков программирования) в качестве вызываемых и вызывающих модулей. БИБЛИОТЕКА ПОДДЕРЖКИ ВРЕМЕНИ ИСПОЛНЕНИЯ Библиотека поддержки времени исполнения (PQBASE RUNTIME LIBRARY) содержит функции для работы с базами данных и управления диалогом. Функции для работы с базами данных поддерживают форматы DBF-файлов, индексных и МЕМО-файлов в соответствии с соглашениями СУБД dBASE, FoxPro, Clipper. По сравнению с перечисленными СУБД в PQBASE применены более быстродействующие алгоритмы, дающие существенный выигрыш во времени и занимаемой памяти. На функциональном уровне введены следующие расширения: - отсутствуют ограничения на размер МЕМО-значения; - предусмотрена обработка МЕМО-значения по частям; - допустимо хранение произвольной двоичной информации; - предусмотрены несколько стратегий распределения памяти в МЕМО-файле: DBT-стратегия, FPT-стратегия, PQBASE-стратегия, позволяющая значительно сократить размер файла (по сравнению с первыми двумя стратегиями) при частых его модификациях. Перечисленные свойства МЕМО-файлов позволяют использовать их для эффективного хранения данных, ориентированных не только на деловые и экономические, но и научные и инженерные приложения (любого размера численные и строковые массивы, структуры, строки переменной длины и др.). Другие отличительные возможности касаются управления буферизацией: - возможность задать размер системного буфера для каждого открываемого файла; - возможность установить необходимый режим сохранения буферов: ручной (при обращении к специальным функциям сохранения или при закрытии файла) или автоматический (при каждом обновлении файла). Функции управления диалогом аналогичны имеющимся в dBASE, FoxPro, Clipper, однако функции PQBASE значительно эффективнее: скорость может быть в 50 и более раз выше при значительной экономии оперативной памяти. ИНТЕРФЕЙС ДЛЯ ДОСТУПА К ФУНКЦИЯМ СУБД PQBASE Данный интерфейс позволяет программировать на высоком уровне обращения к функциям СУБД из традиционных языков программирования типа С/С++, ФОРТРАН, Паскаль, ассемблера. Интерфейс включает набор INCLUDE-файлов или их аналогов к каждому языку. INCLUDE-файлы и их аналоги содержат описания необходимых типов и структур данных, прототипы вызовов, наборы констант. Программирование с использованием данного интерфейса становится не только более легким, но и более безопасным (например, моментально обнаруживаются ошибки рассогласования форматов, неверных обращений к функциям и т.д.), а фрагменты с обращениями к СУБД приобретают свойства переносимости. ТЕХНОЛОГИЯ ПРИМЕНЕНИЯ Технология применения СУБД PQBASE допускает как отдельное, так и совместное использование с другими СУБД (dBASE, FoxBASE/FoxPro, Clipper). Совместное исполнение программ можно проводить в режиме совместимости баз данных (без использования специальных форматов баз данных, имеющихся в PQBASE). При совместном использовании транслирующих средств компилятор СУБД PQBASE рекомендуется применять на последнем этапе (после написания и отладки PRG-программы в другой системе) для получения наиболее эффективного исполнимого кода. Поддержке этой технологии способствует тот факт, что PQBASE-расширения языка воспринимаются в других средах как комментарии. С другой стороны, компилятор PQBASE не исключает возможности автономной отладки программ в среде Си с помощью следующего технологического приема: в текст промежуточного кода на Си автоматически включаются строки на исходном языке PQBASE в качестве комментариев. Технология совместного применения языка PQBASE и традиционных языков программирования (С/С , ФОРТРАН, Паскаль, ассемблера) допускает возможность произвольного сочетания любых этапов, взаимопроникновения и обмена на уровне исходного текста, промежуточного Си-кода, объектных модулей, библиотек, файлов и баз данных без каких-либо ограничений. |
http://swsys.ru/index.php?id=1153&lang=.&page=article |
|