У нас уже 176407 рефератов, курсовых и дипломных работ
Заказать диплом, курсовую, диссертацию


Быстрый переход к готовым работам

Мнение посетителей:

Понравилось
Не понравилось





Книга жалоб
и предложений


 






Название Алгебраический и прикладных аспектах задачи поиска информации
Количество страниц 76
ВУЗ МГИУ
Год сдачи 2010
Бесплатно Скачать 23533.doc 
Содержание Содержание
'Оглавление

Введение 3

Содержание первой главы... 4

Содержание второй главы... 10

Глава I. О комбинаторных свойствах бесповторных

формальных языков 18

§1 Основные определения... 18

§2 Последовательность Аршона и ее структурные свойства ... 23

§3 Последовательность Аршона и порождение эндоморфизмом . . 27

§4 Экспонента избегаемости языка Аршона... 30

§5 Синтаксические конгруэнции бесповторных языков... 33

Глава II. Об интеграции языка SQL с языками разработки

кроссплатформенных систем 40

§6 Обозначения и основные определения... 40

§7 Примеры типичного использования SQL и область применимости модели... 41

§8 SQL запросы и их абстрактное представление... 44

§9 Пакеты запросов и их изоморфизм... 48

§10 Менеджер запросов и наполнение пакетов... 51

§11 Технология SQLj... 57

§12 Интеграция с SQLj... 65

Заключительные замечания 73

Литература 76



Введение

В данной работе рассматриваются вопросы, связанные с задачей поиска и обработки информации.

В общем виде эту задачу можно сформулировать следующим образом. Есть некоторый (обычно конечный) набор данных. Требуется выяснить, присутствует ли в этом наборе информация, удовлетворяющая определенным критериям. И если информация присутствует, извлечь ее в удобном для потребителя виде. Легко понять, что в абстрактном алгоритмическом смысле проблемы как таковой нет, поскольку определить за конечное время наличие некоторого объекта в конечном множестве безусловно можно. Но сложность в том, что нужно уметь решать задачу поиска и извлечения информации быстро, чтобы обеспечить адекватное для человека время реакции поисковой системы на введенный запрос.

Какими же способами можно решать эту задачу? По всей видимости, можно выделить два пути.

1. Можно пытаться оптимизировать сам алгоритм поиска, когда за счет грамотного выбора структур данных, за счет использования параллелизма вычислительных систем уменьшается временная сложность алгоритма.

К этому направлению можно отнести, например, хорошо известные автоматные алгоритмы поиска слов в тексте. Эти алгоритмы настолько важны, что фактически выделяются в отдельную область исследования. Так, алгоритмам сортировки и поиска посвящен отдельный том классического трехтомника Дональда Кнута "Искусство программирования" (см. [22]). В более современном учебнике по компьютерной математике "Алгоритмы: построение и анализ" (см. [23]) алгоритмы сортировки и поиска также составляют значительную часть материала.

Но построение эффективных алгоритмов невозможно без исследований на втором пути.

2. Можно пытаться анализировать критерии поиска и свойства множества объектов, в котором поиск производится. И на основании этого анализа из известных теоретических результатов сделать вывод о наличии или отсутствии искомого объекта, сделать вывод о том, как провести поиск более эффективно.

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

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

Отметим, что формальные языки были упомянуты не случайно. Именно в терминах формальных языков удобно описывать задачу поиска. Поэтому изучение свойств формальных языков является важным для решения задачи поиска в целом.

Первая глава данной работы как раз посвящена изучению некоторых комбинаторных свойств формальных языков. В ней исследуются свойства бесповторных языков, устанавливаются взаимосвязи между комбинаторными свойствами и алгебраическими характеристиками объектов.

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

Перейдем к более подробному изложению постановок задач и обзору полученных результатов.

Содержание первой главы

Формальные языки, исследованию которых посвящена первая глава данной работы, не случайно привлекают интерес исследователей. Даже если оставить за кадром обычные языки, на которых разговаривают люди в окружающем нас мире, найдется масса важных примеров формальных языков. Приведем лишь некоторые из них.

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

2. Информация в компьютерах хранится в виде двоичных слов. Знание свойств таких слов, умение находить повторы или иные регулярности в структуре бинарных последовательностей позволяют эффективно сжимать информацию, снижая нагрузку на каналы связи, увеличивая емкость носителей.

3. Ход любой игры, допускающей лишь конечное множество игровых состояний, может быть представлен в виде слова. Тогда все возможные игровые стратегии, таким способом представленные в виде слов, образуют язык, знание свойств которого позволяет находить выигрышные стратегии, выявлять те или иные свойства игры.

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

Этот список важных примеров можно продолжать. Так что не удивительно, что исследование формальных языков, и бесповторных в частности, имеет уже почти вековую историю. Нас будет интересовать класс бесповторных языков (в них слова не могут в определенном смысле повторяться слишком часто, точное определение понятия бесповторности будет дано в §1) и свойства, присущие языкам этого класса.

Первой работой, в которой было явно сформулировано понятие бесповторности, и были найдены примеры бесповторных последовательностей, по всей видимости, следует считать ставшую классической работу норвежского математика А.Туэ ([17], см. также [27]). В этой работе были поставлены следующие вопросы.

1. Можно ли над алфавитом из двух букв построить бесконечную последовательность символов, не содержащую подслов вида v3? Здесь запись хп обозначает п раз подряд записанное слово х. Точное определение будет дано в §1.

2. Можно ли над алфавитом из трех букв построить бесконечную последовательность символов, не содержащую подслов вида v2?

Может показаться, что ответ на второй вопрос должен быть отрицательным: три буквы — это мало, а требование отсутствия повторов выглядит достаточно сильным. Тем удивительнее факт, что на самом деле на оба вопроса ответ положительный и конструктивный: Туэ построил примеры таких последовательностей.

Еще более удивительным является тот факт, что придуманная Туэ последовательность, дающая положительный ответ на первый вопрос, позже неоднократно переоткрывалась другими авторами. Так, в частности, Морс и Хед-лунд в своей работе [9] независимо от Туэ поставили подобные вопросы и в качестве ответа придумали ту же самую последовательность. Также у этой последовательности, ныне известной как последовательность Туэ-Морса, были обнаружены важные комбинаторные и алгебраические свойства, наличие которых послужило отправной точкой для многих исследований в данной области.

Туэ интересовался существованием бесповторных последовательностей над алфавитами малой мощности. Бесповторность он формулировал как отсутствие подслов вида хп (п € N). Позже стало ясно, что это факт можно выразить в терминах более общего понятия избегаемости (точное определение см. в §1): в слове w отсутствуют подслова вида vn тогда и только тогда,

когда w избегает vn. Следовательно, можно обобщить проблему Туэ так: существует ли бесконечная последовательность символов, избегающая данное слово? И если существует, то какова минимальная мощность алфавита, над которым такое слово можно построить?

Исследования в этом направлении привели к результату, известному как теорема BEM+Z (см. [6, 21]). Оказалось, что не для всякого слова можно построить избегающую его последовательность. А теорема BEM+Z объединила несколько критериев существования такой избегающей последовательности. Переработанное и сведенное воедино доказательство этого важного результата можно найти в [13].

Таким образом, ответ на проблему Туэ в случае классического определения избегаемости дан. Однако понятие избегаем ости можно еще расширить, определив дробные степени слов. Тогда проблема Туэ переформулируется так: можно ли построить бесконечную последовательность, не содержащую подслов вида xq, где q € Q? Если можно, то какова минимальная мощность алфавита, над которым это возможно? Каково минимальное q, для которого над алфавитом заданной мощности это возможно?

Для бинарных алфавитов ответ на последний вопрос дает все та же последовательность Туэ-Морса: она содержит слова вида х2, но не содержит подслов вида ха для любого рационального а > 2 (см. [29, 14]). Легко понять, что в случае бинарного алфавита улучшить результат нельзя: над бинарным алфавитом невозможно построить бесконечную последовательность, не содержащую слов вида х2.

В случае алфавитов мощности 3 и выше ситуация усложняется: лишь в 1972 году Ф.Дежан удалось найти минимальное q для алфавита мощности 3 и высказать гипотезу о том, чему равно минимальное q для алфавитов большей мощности (см. [7], также см. [24]). Позже в [11] гипотеза Дежан была доказана для алфавита мощности 4, а затем в [10] гипотеза была доказана для алфавитов, мощность которых лежит в диапазоне от 5 до 11.

Наличие таких экстремальных в смысле избегаемости языков (в дальнейшем их будем называть просто экстремальными) наводит на вопросы: Как много таких экстремальных языков, со структурой, ограниченной сильным требованием бесповторности? Как такие экстремальные языки устроены?

Оказалось (см. [29, 14]), что последовательность Туэ-Морса фактически исчерпывает все экстремальные языки над бинарным алфавитом в том смысле, что любое экстремальное бинарное слово на 70% состоит из подслова последовательности Туэ-Морса. То есть получается достаточно простое описание класса всех экстремальных языков над бинарным алфавитом. И вполне естественной выглядит попытка рассмотреть класс экстремальных языков над трехэлементным алфавитом, изучить его конкретных представителей, выявить общие свойства и, быть может, даже перенести в каком-то виде вышеназванный результат об устройстве класса бинарных экстремальных языков на случай трехэлементного алфавита. Собственно, эти идеи и яви-

лись отправной точкой для исследования, результаты которого изложены в первой главе.

Основным объектом исследования стал язык Аршона, который строится из бесконечной символьной последовательности Аршона путем перечисления всех имеющихся в ней конечных подслов (в дальнейшем будут упоминаться еще несколько языков, построенных по соответствующим бесконечным последовательностям подобным образом). Отметим, что с точки зрения экстремальности бесконечная последовательность и язык всех ее подслов эквивалентны, поэтому мы не будем специально различать эти объекты, когда речь будет идти лишь об экстремальности.

Еще из работы Туэ было известно, что над трехэлементным алфавитом существуют бесконечные бесквадратные языки. Следовательно, представителей класса экстремальных языков следует искать именно среди бесквадратных языков. И два таких языка уже появлялись в исследованиях. Речь идет о языке Дежан (он заведомо лежит в классе экстремальных, поскольку порождающая его символьная последовательность специально строилась так, чтобы оказаться экстремальной) и о языке Аршона (последовательность изначально конструировалась как просто бесквадратная (см. [19]), позже она использовалась в качестве важного вспомогательного элемента в решении групповой проблемы Бернсайда [18]). Отметим, что язык, получающийся из ранее упоминавшейся бесквадратной последовательности Туэ, экстремальным не является. Поэтому для данного исследования он особого интереса не представляет.

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

1. Язык Аршона задается итерацией двух эндомоморфизмов свободной полугруппы. Как работать с таким объектом? Можно ли каким-то образом от итерации двух эндомоморфизмов перейти к достаточно хорошо изученной итерации одного эндомоморфизма?

2. Язык Аршона бесквадратен. Этот факт говорит о почти экстремальной бесповторности языка. А чему равно точное значение границы избега-емости языка Аршона? Является ли он на самом деле экстремально бесповторным?

3. Насколько похож язык Аршона на другие экстремально бесповторные языки с точки зрения устройства синтаксической конгруэнции языка? Как устроена синтаксическая конгруэнция языка Аршона?

Проведенное исследование дает ответы на все поставленные вопросы. Вот какими оказались результаты.

1. На пути изучения способа задания языка Аршона итерацией двух эндомоморфизмов выяснилось, что на достаточно длинных словах итерация

двух порождающих эндомоморфизмов ведет себя как один обычный эндомоморфизм. Это свойство позволило при изучении языка Аршона применить в немного доработанном виде обычную в этой области индуктивную технику исследования последовательностей, порожденных итерацией эндомоморфизма. Описанию этой техники посвящен §2.

2. Однако полностью перейти к заданию языка Аршона итерацией одного эндомоморфизма невозможно: придуманная техника работы с последовательностью Аршона позволила установить принципиально иным способом ранее известный (см. [7]) результат:

Теорема 1

Последовательность Аршона невозможно породить итерацией одного эндоморфизма.

Доказательству этого факта посвящен §3.

3. Применение разработанной техники позволило установить экстремальность языка Аршона. Она непосредственно следует из следующей теоремы:

Теорема 2

Граница избегаемости языка Аршона равна |.

То есть язык Аршона действительно оказался в интересующем нас классе. И тем более важным оказывается исследование его свойств, поскольку если у исследуемого класса экстремальных языков и есть какое-то характерное свойство, этим свойством обязаны обладать языки Дежан и Аршона.

Доказательству теоремы 2 посвящен §4.

4. Также было изучено строение синтаксической конгруэнции языка Аршона (точное определение см. в §1). Оказалось, что синтаксическая конгруэнция языка Аршона совпадает с рисовской конгруэнцией свободной полугруппы по дополнению к языку Аршона.

Заметим, что данный результат, полученный в совместной работе [37], прекрасно вписался в систему подобных результатов: этим же свойством обладает двухбуквенный язык Туэ-Морса (см. [28]); легко доказывается что язык Дежан им также обладает.

Свойство совпадения синтаксической конгруэнции языка с рисовской конгруэнцией по дополнению языка, как оказалось, представляет отдельный интерес. Так, все названные случаи совпадения конгруэнции
следствием другого, более общего результата, о котором речь пойдет ниже.

Интерес исследователей к синтаксическим конгруэнциям языков вызван многими причинами. Назовем лишь две из них, наиболее важные для нас.

Во-первых, знание синтаксической конгруэнции и синтаксического моноида (т.е. фактор-моноида свободного моноида по синтаксической конгруэнции) позволяет судить о распознаваемости языка, о существовании эффективного алгоритма, распознающего слова языка.

Как известно, теорема Клини отвечает на подобный вопрос: она утверждает, что классы регулярных и представимых языков совпадают (см. [27, Глава 2]). Но теорему Клини можно переформулировать и на языке полугрупп: язык является регулярным (и, соответственно, представимым) тогда и только тогда, когда его синтаксический моноид конечен (см. [24, Глава 6]). Более того, синтаксический моноид фактически определяет автомат, распознающий язык. Поэтому устройство синтаксического моноида непосредственно связано со сложностью и эффективностью распознающего алгоритма.

Во-вторых, Эйленберг (см., например, [12]) установил, что между многообразиями конечных полугрупп и специальными классами языков (их называют многообразиями языков) существует взаимно-однозначное соответствие. И в основе этого соответствия лежит сопоставление языку его синтаксической полугруппы.

Соответствие Эйленберга позволяет решать задачу классификации языков, группировать в один класс языки со схожими свойствами синтаксических полугрупп. Или наоборот выяснять, как конкретное свойство полугруппы влияет на свойства языка, для которого эта полугруппа является синтаксической.

Обычно результаты в этой области получаются именно так: от полугрупп к языкам. В качестве наиболее яркого примера можно привести теорему Шютценберже (см., например, [12]), которая утверждает, что многообразие апериодических (комбинаторных) конечных моноидов соответствует многообразию звездно-свободных языков. Фактически с этого результата и начались исследования многообразий языков.

В нашем же случае в основу исследования положены комбинаторные свойства языков (бесповторность, в частности). И очень естественным выглядит желание попытаться понять, как устроено многообразие полугрупп, отвечающее бесповторным языкам.

В процессе изучения различных бесповторных языков (в частности, Туэ-Морса, Дежан, Аршона) была отмечена закономерность: у всех названных языков синтаксическая конгруэнция совпадает с рисовской конгруэнцией по дополнению к языку. И это совпадение оказалось не случайным: было обнаружено достаточное условие для такого совпадения конгруэнции.

Язык L называется равномерно рекуррентным, если для произвольного слова v G L существует такое целое число nv, что v содержится в качестве подслова во всяком слове w ? L длины большей nv. Язык L называется языком ограниченной экспоненты, если существует такое целое число к, что никакое слово из L не содержит подслов вида хк. Язык называется фактори-альным, если вместе с каждым своим словом он содержит все подслова этого слова (иными словами, язык является факториальным, если он замкнут относительно взятия подслов).

Теорема 3

Синтаксическая конгруэнция бесконечного равномерно рекуррентного фак-ториального языка ограниченной экспоненты совпадает с рисовской конгруэнцией по дополнению этого языка до свободной полугруппы.

Эта теорема охватывает достаточно широкий класс языков. Достаточно сказать, например, что под условие теоремы попадают все языки ограниченной экспоненты, порожденные DOL-системами (про DOL-системы см., например, [27]).

Содержание второй главы

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

Особенно ярко этот недостаток существующих технологий проявился в процессе создания программного продукта QMF for WebSphere (подробную информацию о продукте см., например, в [4, 5]), в коллектив разработчиков которого входит автор данной работы.

Одна из основных задач, которая ставилась при разработке QMF for WebSphere, состояла в обеспечении работоспособности программы на всем спектре систем управления базами данных IBM DB2: от систем, работающих на персональных компьютерах, до систем, предназначенных для использования на крупных предприятиях. Также требовалось обеспечить поддержку СУБД других производителей (Oracle, в частности). Поэтому особенно важным оказалось придумать такую модель взаимодействия с СУБД, чтобы использование широкого набора целевых СУБД в программном продукте было максимально простым.

В процессе осмысления задачи, на основе имеющегося большого опыта разработки программ, взаимодействующих с СУБД, автору данного текста
удалось выявить некоторые общие закономерности, которые позволили построить необходимую модель и обеспечить реализацию требующейся функциональности в рамках программного продукта. Однако сфера применимости созданной модели не ограничивается отдельно взятым программным продуктом: исходная задача допускает естественное обобщение (точная постановка будет дана ниже), а модель, являющаяся решением этой обобщенной задачи, позволяет не только существенно упростить процесс адаптации продукта под различные СУБД, но и ощутимо снизить сложность процессов разработки, отладки и поддержки программы. В таком обобщенном виде модель оказывается достаточно универсальной для использования в самых разнообразных ситуациях, в широком спектре разрабатываемых программных систем.

Описанию решения этой обобщенной задачи и посвящена данная глава.

Отметим, что в процессе исследования задачи, в процессе поиска решений для реализации QMF for WebSphere было разработано несколько технологических и технических решений, представляющих самостоятельный интерес. В частности был разработан уровень абстракции баз данных (database abstraction layer), подсистема управления запросами, технология интеграции с SQLj API, технологии оптимизации операций с серверами баз данных. Все эти решения сейчас являются неотъемлемой частью продукта.

Некоторые из этих решений, а именно подсистема управления запросами и технология интеграции с SQLj API, непосредственной разработкой которых занимался автор этого текста, вошли в состав решения рассматриваемой задачи. Изучение способа их конкретной реализации может представлять самостоятельный интерес. Однако нас будет интересовать не столько программный код, решающий рассматриваемую задачу в конкретном продукте, сколько технология, подход, абстрактная модель, дающие общее решение задачи.

К сожалению, полностью избежать использования фрагментов кода при изложении материала не удалось. Но приведенный код носит лишь иллюстративный характер. Модель без потери своих характеристик вполне допускает альтернативные реализации.

Также отметим, что характерной чертой модели является совмещение сугубо математических понятий с прикладными технологиями. Так, в самой основе модели лежит изоморфизм некоторых объектов. И именно наличие такого изоморфизма позволяет построить ядро модели. Но с другой стороны, без связки ядра модели с реальными прикладными технологиями, устройство ядра теряет ценность. Поэтому мы не будем ограничиваться описанием сугубо абстрактной части модели. А дадим описание того, как связать ядро модели с технологиями, используемыми в реальных задачах разработки промышленного программного обеспечения. Отметим, что на самом деле подобные связки также представляют независимый интерес и отдельную ценность, но в данном случае мы будем их рассматривать как неотъемлемую часть модели.

Прежде чем дать точную формулировку задачи, решение которой будет обсуждаться, обратимся к предыстории вопроса.

Как уже упоминалось выше, в настоящее время достаточно большое количество программных комплексов пользуются сервисами СУБД. Причина ясна: очень удобно иметь единый, в какой-то мере стандартный и универсальный способ описания и решения типичных задач управления данными. Так, практически всегда требуется сначала каким-то способом определить структуры для хранения данных, затем описать правила согласованности, целостности данных, затем, собственно, описать операции по извлечению данных, по их изменению. Неудивительно, что язык SEQUEL (Structured English Query Language), разработанный в 1974 году в исследовательских лабораториях корпорации IBM для решения подобных задач управления данными, оказался положительно воспринят разработчиками программного обеспечения и был взят за основу при подготовке спецификации стандартного языка запросов.

В результате была выделена та общая сущность, которая объединяла все имевшиеся на тот момент реализации систем управления базами данных (каждый разработчик СУБД предлагал свои уникальные возможности в рамках своей СУБД), и в 1986 году ANSI опубликовал первую спефика-цию языка запросов, ныне широко известного как SQL (Structured Query Language). В свою очередь разработчики СУБД постарались обеспечить максимальную совместимость своих систем с этим ставшим стандартным языком. Позже язык SQL несколько раз расширялся, чтобы учесть новые требования, новые возможности применения СУБД, новые технологии. Но по сей день в любой задаче, связанной с хранением и обработкой данных, в той или иной степени используется SQL.

Таким образом, на сегодняшний день SQL является стандартным языком взаимодействия с СУБД. Он поддерживается всеми современными СУБД. Все современные средства разработки программ предлагают доступ к API, позволяющему использовать SQL для доступа к данным. Создается впечатление, что использование SQL в чистом виде решает все задачи, возникающие при создании программных систем. Однако на самом деле это не так. Все хорошо, когда речь идет о разработке небольших программ. Как только же речь заходит о реализации крупной программной системы, использующей СУБД, о тесной интеграции языка SQL и основного языка разработки программного продукта, неминуемо проявляются следующие неприятные для разработчика моменты, которые невозможно обойти в рамках обычных классических методов использования SQL в программах.

1. Разные СУБД используют разные диалекты SQL. To есть в СУБД реализуется основная часть спецификации SQL, а затем добавляется расширение языка, специфичное для конкретного сервера баз данных. В
результате разработчик вынужден выбирать: либо сохранить независимость программы от СУБД, оставаясь в рамках стандартной части SQL (при этом в жертву приносятся быстродействие программы и возможность использования специфики сервера, часто выигрышной для пользователя), либо использовать максимум возможностей конкретного сервера (при этом неминуемо теряются переносимость кода и независимость от СУБД).

2. Язык SQL является инородным по отношению к основному языку программирования, на котором ведется разработка системы. С одной стороны это хорошо: для понимания конструкций SQL не требуется знать язык, на котором написана сама программа. Но с другой стороны из этой инородности SQL следуют два неприятных факта.

(a) В процессе трансляции программы невозможно проверить корректность (синтаксическую и логическую) конструкций SQL. Следовательно, усложняется отладка кода: требуется обеспечить во время тестирования выполнение всех веток программного кода, на которых происходит запуск SQL-конструкций. Причем такой подход позволяет установить лишь синтаксическую корректность используемых конструкций SQL. Если же SQL-запросы содержат параметры, отладка становится еще сложнее.

(b) Конструкции SQL оказываются разбросанными по коду программы. Следовательно, усложняется сопровождение программы, поскольку любое изменение в используемой структуре таблиц СУБД неминуемо влечет тщательный анализ всего программного кода с целью выявления SQL-конструкций, подлежащих исправлению.

3. Во многих случаях SQL-конструкции являются постоянными в том смысле, что SQL-запрос в процессе использования программы не меняется, а меняются лишь отдельные параметры запроса. Было бы крайне заманчиво в такой ситуации заранее подготовить, "откомпилировать" SQL-конструкции в некий полуфабрикат, который потом сэкономит время на запуске запроса (в момент запуска не придется выполнять синтаксический анализ запроса, не потребуется готовить план выполнения SQL-конструкции). Стандартные API взаимодействия с СУБД (ODBC, JDBC) не предоставляют таких возможностей. Точнее, подобные возможности есть, но они носят локальный характер: можно не выполнять повторную трансляцию запроса, когда он выполняется, скажем, несколько раз в цикле; но при повторных запусках программы все равно требуется заново транслировать каждый запрос SQL.

Еще раз подчеркнем, что на вышеназванные проблемные места можно не обращать внимания при разработке небольшой программы, использую-
щей одну конкретную СУБД. В этом случае они не очень существенны. Но в случае большого проекта их влияние нельзя недооценивать. Так, автору требовалось обеспечить работоспособность продукта в кроссплатформенной среде (точное определение см. в §6) на всей линейке серверов IBM DB2, на базах Informix, Red Brick, Oracle, на других СУБД, на платформах от персональных компьютеров до промышленных мэйнфреймов. Легко понять, что в подобных условиях крайне валено обеспечить максимальную гибкость в привязке к базе данных, как можно сильнее упростить процессы разработки, отладки и сопровождения продукта. В результате вполне естественной выглядит следующая задача: разработать единый подход к решению проблем интеграции разных языков и построить модель системы управления SQL-запросами, устраняющую вышеназванные недостатки. Сформулируем требования, которым должна удовлетворять искомая модель.

Т1. В рамках модели не должно быть привязки к конкретной СУБД. В то же время должна быть возможность гибкой адаптации продукта к любой целевой СУБД, к любому диалекту языка SQL без существенной модификации бизнес-логики продукта.

Т2. Код SQL должен быть отделен от кода на основном языке программирования. В идеале он вообще должен находиться в отдельном наборе файлов (в принципе, файл может быть один).

ТЗ. Организация системы управления SQL-запросами должна быть такова, чтобы обеспечить автоматизированную проверку всех (или почти всех) имеющихся в программе SQL-конструкций на этапе сборки программы.

Т4. Система управления SQL-запросами должна допускать использование специфических средств сервера баз данных для предкомпиляции SQL-конструкций с целью оптимизации выполнения запросов.

В построении такой модели и состоит суть данной работы. Отметим, что apriori совсем не ясно, существует ли нужная модель.

Удивительным, на наш взгляд, является тот факт, что выполнить все названные требования оказалось вполне возможно. Причем реализация возникающей в результате модели действительно дает весьма ощутимый выигрыш в процессе разработки и дальнейшего сопровождения программного комплекса. Опыт использования отдельных элементов модели в продукте QMF for WebSphere наглядно это продемонстрировал.

Сразу же отметим, что в рамках данного текста в качестве целевого языка программирования используются язык Java и связанная с этим языком терминология. Но это ни в коей мере не означает, что модель может быть реализована только на Java. С минимальной адаптацией она реализуется на произвольном объектно-ориентированном языке программирования.
Процесс построения модели будет состоять из нескольких шагов.

Сначала (§8) будет введено понятие пакета запросов. Окажется, что для пакетов запросов можно естественным образом построить изоморфизм. И наличие этого изоморфизма позволит так скомпоновать пакеты запросов, что будет обеспечена возможность гибко подстраиваться под конкретный сервер баз данных. Для хранения пакетов запросов будет предложена структура данных (менеджер запросов), позволяющая эффективно оперировать пакетами. Тем самым будет удовлетворено требование Т1.

Затем (§10) будет показано, как организовать наполнение структуры данных для хранения пакетов собственно информацией о запросах, составляющих пакеты. Окажется, что удобно выделить исходные тексты запросов в отдельный файл специальной структуры, а наполнение хранилища запросов производить при помощи специальной программы-конвертера. Тем самым будет удовлетворено требование Т2. Также станет ясно, что и требование ТЗ оказывается удовлетворенным, поскольку хранилище будет располагать достаточной информацией для автоматизированного тестирования.

На этот момент окажутся удовлетворенными все требования к модели, кроме требования Т4. Поэтому останется рассмотреть технологию SQLj и способ ее использования для удовлетворения требования Т4.

Сначала будет рассмотрен SQLj API. Это стандартный программный интерфейс, предложенный ведущими производителями СУБД для интеграции SQL-конструкций в язык программирования Java. Отметим, что упоминание языка Java не уменьшает общности, поскольку аналоги SQLj API есть и для других языков програмирования. Функциональность, предоставляемая такими API практически не различается. Окажется, что простое применение SQLj позволяет выполнить требование Т4 и частично требования Т2 и ТЗ. Но требование Т1 при этом гарантированно не выполняется.

Тем не менее, в рамках рассматриваемой модели вполне можно воспользоваться технологией SQLj. За счет этого можно получить доступ к крайне полезным возможностям, предоставляемым SQLj API, в рамках нашей модели. В частности, использование SQLj API позволяет выполнить требование Т4, которое невозможно удовлетворить другими способами.

Обсуждению всех аспектов модели, связанных с технологией SQLj посвящены §11 и §12.
В результате получается достаточно удобная и гибкая, и в то же время очень емкая, конструктивно и концептуально простая, модель. Даже упрощенная ее реализация в рамках коммерческого продукта QMF for WebSphere наглядно продемонстрировала названные качества.

Для удобства читателя каждый существенный фрагмент модели содержит краткое описание корректности конструкции. Утверждения о корректности оформлены в виде теорем, что дополнительно подчеркивает логическую структуру модели.

С точки зрения содержания, в описании модели можно выделить следу-
ющие особо значимые фрагменты.
• Объектная структура ядра модели. Она является скелетом для построения остального кода. Именно удачность выбранной структуры позволяет удовлетворить все поставленные требования, позволяет гибко адаптировать систему к различным СУБД.

• Нетривиальный подход к применению технологии статического SQL (SQLj). Он позволяет использовать преимущества конкретных серверов в сфере оптимизации запросов. Отметим, что в рамках разработки QMF for WebSphere это вторая попытка получить интеграцию с SQLj. Первая оказалась неудачной, поскольку не удалось найти такого способа использования SQLj, который бы гарантировал работоспособность технологии на всех используемых СУБД. А в рамках описываемой модели такой способ был найден.

• Очень удобный способ описания логики работы программы при помощи собственного языка. Такой подход в рамках модели используется для наполнения менеджера запросов данными, позволяет отделить код на SQL от кода на основном языке программирования.

Как будет описано в §10, суть приема состоит в том, что фактически на базе основного языка программирования строится модуль, способный выполнять определенные наборы операций, специфика которых описывается на собственном специальном языке. То есть фактически возникает еще более высокоуровневый язык описания логики системы (в случае рассматриваемой модели в качестве языка более высокого уровня выступает текстовый формат представления пакетов и составляющих их запросов). Использование же более высокоуровневых языков повышает скорость разработки, этот факт общеизвестен.

Важность такой технологии "многоуровневого" программирования состоит в том, что часто она может быть использована для очень гибкой параметризации кода, для отделения описания бизнес-логики от реализации ее отдельных элементов. Эти преимущества технологии "многоуровневого" программирования были успешно использованы автором ранее при разработке клиент-серверной корпоративной информационной системы для Министерства охраны окружающей среды (см. [35]), где на специальном языке описывалось поведение большого количества функционально сложных диалогов просмотра/редактирования данных и нетривиальная логика их взаимодействия с СУБД, в которой данные размещались.

Таковы результаты, изложенные в этой работе. Они докладывались на Алгебраической конференции памяти Куроша (Москва, 1998), Международной конференции по теории полугрупп и ее приложениям (С-Петербург, 1999),|
на XXIX школе-семинаре "Математическое моделирование в проблемах рационального природопользования" (Ростов на Дону, 2001), конференциях Дискретный анализ и исследование операций (Новосибирск, 2002) и Маль-цевские чтения (Новосибирск, 2004), а также на семинарах "Дискретная математика" и "Алгебраические системы" Уральского государственного университета и на семинаре "Теория автоматов" Московского государственного университета. Прикладные результаты были успешно использованы при разработке коммерческого программного продукта IBM QMF for WebSphere.

Основные результаты опубликованы в [30, 31, 32, 33, 34, 35, 36, 37]. Из совместных работ в данном тексте используются лишь результаты, принадлежащие автору.

Работа выполнена под руководством профессора Евгения Витальевича Суханова, которому автор глубоко признателен за постоянное внимание и всестороннюю поддержку.
Список литературы
Цена, в рублях:

(при оплате в другой валюте, пересчет по курсу центрального банка на день оплаты)
1425
Скачать бесплатно 23533.doc 





Найти готовую работу


ЗАКАЗАТЬ

Обратная связь:


Связаться

Доставка любой диссертации из России и Украины



Ссылки:

Выполнение и продажа диссертаций, бесплатный каталог статей и авторефератов

Счетчики:

Besucherzahler
счетчик посещений

© 2006-2022. Все права защищены.
Выполнение уникальных качественных работ - от эссе и реферата до диссертации. Заказ готовых, сдававшихся ранее работ.