Исследование и разработка нового типа индекса для СУБД Oracle на базе суффиксных деревьев

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.12.2019
Размер файла 725,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

В Oracle был создан новый TYPE, который реализует функции интерфейса ODCIIndex, отвечающего за взаимодействие СУБД с пользовательским индексом. Также реализованы функции-обёртки PL/SQL, вызывающие соответствующие методы в JVM. Одним из завершающих этапов реализации было создание функции поиска подстроки в строках таблицы, использующей новый TYPE, а также создание оператора, использующего эту функцию. После чего был успешно создан пользовательский INDEXTYPE, а далее INDEX. При создании INDEX, ОСД было построено без ошибок, таким образом, считаем, что этап реализации нового типа индекса проведен успешно.

4. Исследование полученных результатов

Для исследования, создадим индекс для таблицы text_table, столбца text (см. Листинг 3.11).

Скорость создания индекса линейна, это показывает эксперимент с построением индекса над столбцом, количество строк которого растет в 2 раза (с одинаковой длиной) перед каждым построением - алгоритм затрачивает каждый раз примерно в 2 раза больше времени.

Для того, чтобы определить увидеть, что функция поиска строк, содержащих искомую подстроку, вызывается и отрабатывает верно, сделаем следующий запрос: select text from text_table where contains_op(text, 'they') = 1;

Запрос возвращает все строки, содержащие в себе подстроку «they». Результат выполнения запроса показан на рисунке 4.1.

Рис. 4.1 Результат поиска строк с подстрокой «they».

Результат верный, попробуем сделать еще один запрос, уже с другой подстрокой - «be»: select text from text_table where contains_op(text, 'be') = 1;

Результат также верен, он показан на рисунке 4.2.

Рис. 4.2 Результат поиска строк с подстрокой «be»

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

Рис. 4.3 Результат запроса на удаления строки из индексируемой таблицы

Для получения оценки и плана запроса, выполним следующие команды:

set autotrace traceonly explain

select text from text_table where contains_op(text, 'a') = 1;

Результат показан на рисунке 4.4.

Рис. 4.4 Оценка запроса, применяющего пользовательский индекс

Для сравнения, выберем индекс Oracle Text, с его оператором contains(). Oracle Text поставляется с СУБД начиная с 11 версии. Для того чтобы построить индекс над таблицей text_table2 (копия text_table), выполним следующую команду:

CREATE INDEX docs_idx ON text_table2 (text) INDEXTYPE IS ctxsys.context;

Время построения индекса Oracle Text несколько ниже, (процентов на 20-25), но только потому, что jvm проводит сериализацию ОСД, а это достаточно затратная операция. Если провести сравнения, без сохранения ОСД, то индекс на основе ОСД, строится за время, меньшее чем Oracle Text, процентов на 5-10%.

Сравним полученные метрики нового индекса с метриками индекса Oracle Text. Запросы аналогичны приведенным выше, их результат показан на рисунке 4.5.

Рис. 4.5 Оценка запроса, применяющего oracle text индекс

Как видим из рисунков 4.4 и 4.5, планы запросов схожи, различие лишь в графе Cost - у пользовательского индекса стоимость чуть ниже, чем у Oracle Text. Скорость выполнения запросов у двух индексов, примерно одинаковы.

Выводы по главе 4: В данной главе, был протестирован новый тип индекса, на основе ОСД. Согласно полученным результатам запросов, делаем вывод, что алгоритм построения ОСД и поиска в нём работает корректно, т.к. вернувшиеся строки индексируемого столбца в действительности содержат искомую подстроку. Подтвердили эмпирическим путем, что скорость построения ОСД линейна, что соответствует теории. Установили, что Oracle Text затрачивает чуть больше ресурсов ЦПУ. Скорость индексов при поиске подстроки примерно одинакова. Однако Oracle Text строит индекс несколько быстрее, поскольку значительное время jvm тратит на сохранение ОСД.

Заключение

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

Выводы по главе 1: Рассмотрены цели индексирования данных, а также некоторые существующие подходы к индексированию данных, посредством применения различных структур хранения индексов. Это такие структуры как битовые карты, хэш-индексы, b-деревья, суффиксное дерево. Были приведены их достоинства и недостатки. Согласно техническому заданию, особо акцентировано внимание на суффиксном дереве, как целевой структуре хранения данных в данной работе.

Выводы по главе 2: Сформулированы принципы построения ОСД, с учетом контекста его применения - в СУБД Oracle. Это такие принципы как: использование rowid (18 знаков) индексируемой строки в качестве терминального символа; способ получения всех rowid строк, содержащих искомую подстроку; построение ОСД алгоритмом Укконена над общей строкой, полученной посредством конкатенации всех строк (с терминальной строкой на конце) индексируемого столбца; сохранение ОСД в таблице БД. Рассмотрели правила создания Extensible Indexing (основываясь на документации СУБД Oracle) применимо к задаче данной работы. Выработали концепцию взаимодействия jvm с СУБД Oracle.

Выводы по Главе 3: Реализован алгоритм построения ОСД (на основе алгоритма Укконена) и поиска строк с заданной подстрокой в нем (алгоритмы были описаны в Главе 2 данной работы). Также встроили эту реализацию в СУБД Oracle, добавив функционал записи ОСД в таблицу, чтения из неё, а также добавив метод построения ОСД из строк индексируемого столбца. Для всего этого использовалась библиотека JDBC Oracle.

В Oracle был создан новый TYPE, который реализует функции интерфейса ODCIIndex, отвечающего за взаимодействие СУБД с пользовательским индексом. Также реализованы функции-обёртки PL/SQL, вызывающие соответствующие методы в JVM. Одним из завершающих этапов реализации было создание функции поиска подстроки в строках таблицы, использующей новый TYPE, а также создание оператора, использующего эту функцию. После чего был успешно создан пользовательский INDEXTYPE, а далее INDEX. При создании INDEX, ОСД было построено без ошибок, таким образом, считаем, что этап реализации нового типа индекса проведен успешно.

Выводы по главе 4: Был протестирован новый тип индекса, на основе ОСД. Согласно полученным результатам запросов, делаем вывод, что алгоритм построения ОСД и поиска в нём работает корректно, т.к. вернувшиеся строки индексируемого столбца в действительности содержат искомую подстроку. Подтвердили эмпирическим путем, что скорость построения ОСД линейна, что соответствует теории. Установили, что Oracle Text затрачивает чуть больше ресурсов ЦПУ. Скорость индексов при поиске подстроки примерно одинакова. Однако Oracle Text строит индекс несколько быстрее, поскольку значительное время jvm тратит на сохранение ОСД.

Для достижения поставленной цели в данной работе решены следующие задачи:

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

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

3. Применение полученных теоретических результатов для решаемых задач поиска подстроки.

4. Программная реализация индекса; получение экспериментальных данных; сравнение полученных реализаций с аналогами.

Список используемых источников

1. Гасфилд, Д. Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология / Д. Гасфилд; Пер. с англ. СПб.: Невский Диалект; БХВ-Петербург, 2003. 654 с.

2. Gusfield, Dan. Strmat / Dan Gusfiels // http://www.cs.ucdavis.edu /~gusfield/strmat.html

3. Giegerich, Robert. Efficient implementation of lazy suffix trees / Robert Giegerich, Stefan Kurtz, Jens Stoye // In the Proc. of 3rd Intl. Workshop on Algorithm Engineering. Lecture Notes in Computer Science. Vol. 1668. 1999. P.30-42.

4. Андрианов И.А. Анализ и разработка способов индексирования текстов на основе обобщенных и неплотных суффиксных деревьев

5. Kurtz, S. Reducing the space requirements of suffix trees / S. Kurtz // Software - Practice and Experience. 1999. Vol. 29. P.1149-1171.

6. Смит Б. Методы и алгоритмы вычислений на строках = Computing Patterns in Strings. М.: Вильямс, 2006. 496 с.

7. Гасфилд Д. Строки, деревья и последовательности в алгоритмах: Информатика и вычислительная биология / Пер. с англ. И. В. Романовского. 2-е изд. СПб.: Невский Диалект, 2003. 654 с.

8. Окулов С. М. Алгоритмы обработки строк. М.: Бином, 2013. 255 с

9. Электронный источник: https://marknelson.us/posts/1996/08/01/suffix-trees.html - Fast String Searching With Suffix Trees

10. Ключаев, А.А., Матьяш, В.А., Щекин, С.В. Структуры и алгоритмы обработки данных: учебное пособие / А.А. Ключаев, В.А. Матьяш, С.В. Щекин. СПб.: СПбГУАП, 2003. 172 с.

11. Кузнецов, С.Д. Методы сортировки и поиска / С.Д. Кузнецов // http://citforum.ru/programming/theory/sorting/sorting1.shtml

12. Айткулов П.Г. Исследование и разработка методов и алгоритмов обработки символьных массивов в базах данных / П.Г. Айткулов; дис. … канд. техн. наук. Москва: Институт проблем управления им. В. А. Трапезникова РАН, 2010. 97 с.

13. Maab, M. Suffix Trees and their Applications / M. Maab // Technische Universi at M unchen. 1999.

14. Применение суффиксных деревьев в поиске подстрок текста / II Международная научно-практическая конференция «Современная наука: актуальные вопросы, достижения и инновации» / 05.06.2018 г. Пенза, РФ

15. Исследование и разработка подходов к индексированию больших текстов в СУБД Oracle / Международный научно-практический журнал - «Теория и практика современной науки» / №12(42) Декабрь 2018

16. Разработка INDEXTYPE на языке Java для СУБД Oracle / Международный научно-практический журнал - «Теория и практика современной науки» / №7(49) Июль 2019

Размещено на Allbest.ru

...

Подобные документы

  • Краткая история развития СУБД ORACLE, основные понятия и определения, архитектура. Принципы работы с СУБД ORACLE. Разработка баз данных, средства и технологии их реализации; возможности процедурного языка PL/SQL. Приемы администрирования СУБД ORACLE.

    презентация [609,2 K], добавлен 14.02.2014

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

    курсовая работа [1,3 M], добавлен 31.05.2016

  • Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.

    курсовая работа [276,1 K], добавлен 19.07.2014

  • Теоретические сведения об алгоритмах поиска подстроки в строке. Глобализация информации в сети Internet. Интеллектуальный поиск. Алгоритм последовательного (прямого) поиска, Рабина и их применение. Анализ алгоритмов. Реализация программного кода.

    курсовая работа [230,8 K], добавлен 12.02.2009

  • Описание процедуры выбора структуры хранения данных. Программная реализация одномерного неоднородного массива. Представление бинарного дерева в виде динамической структуры данных. Изучение способов поиска в упорядоченном дереве. Содержание базы данных.

    практическая работа [850,0 K], добавлен 16.04.2015

  • Анализ возможных подходов к созданию web-приложения с использованием программирования Java и CGI. Разработка структуры базы данных и реализация полученной модели в рамках СУБД. Обеспечение диалога CGI-программы с пользователем, используя браузер.

    курсовая работа [310,9 K], добавлен 07.08.2011

  • Описание языка программирования Java: общие характеристики, главные свойства, краткий обзор. Надежность и безопасность, производительность и базовая система программы. Разработка программы поиска по словарю, алгоритм её работы. Общий вид кода программы.

    курсовая работа [20,3 K], добавлен 28.10.2012

  • Объекты модели хранения данных базы данных ORACLE. Взаимосвязь между логическими структурами. Средства манипулирования данными языка SQL, данными языка SQL. Структура выполнения простейших запросов. Формирование критерия отбора. Сортировка данных.

    презентация [120,1 K], добавлен 14.02.2014

  • Организация работы базы данных с помощью сбалансированных В-деревьев: принципы, методы добавления, поиска, удаления элементов из структуры. Процедуры, производящие балансировку и слияние записей в блоке. Реализация программы в Научной библиотеке ОрелГТУ.

    курсовая работа [95,3 K], добавлен 12.08.2011

  • Создание сайта-каталога программного обеспечения с поиском на основе булевой модели. Достоинства и недостатки булевой модели. Алгоритм поиска по слову в базе данных системы. Разработка руководства пользователя и администратора по работе с системой.

    курсовая работа [1,0 M], добавлен 28.04.2014

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

    курсовая работа [2,7 M], добавлен 24.05.2012

  • Организация данных с помощью бинарных деревьев. Определение бинарного дерева. Упорядоченное двоичное дерево поиска и его свойства. Программная реализация добавления данных в упорядоченное двоичное дерево с использованием динамических структур данных.

    курсовая работа [459,0 K], добавлен 09.08.2012

  • Инфологическая модель предметной области. Схемы простых объектов и их свойства. Построение реляционных отношений на основе инфологической модели базы данных. Сетевая и иерархическая даталогическая модели БД. Структура таблиц, реализованных в СУБД Oracle.

    курсовая работа [1,0 M], добавлен 10.06.2014

  • Обзор существующих популярных программ для просмотра погоды на ОС Android. Операционные системы современных смартфонов. Ключевые особенности Android, технология Java. Разработка программной части, выбор языка, описание алгоритма, ее логической структуры.

    курсовая работа [911,5 K], добавлен 16.04.2014

  • Обзор существующих систем атоматизированного поиска. Мир электронных денег. Разработка структуры системы автоматизированного поиска отделений и терминалов банков. Обоснование выбора технологии разработки, программной среды и языка программирования.

    курсовая работа [1,2 M], добавлен 17.01.2011

  • Разработка web-приложения для оперирования данными с помощью базы данных и web-браузера в качестве клиента пользователя. Основные преимущества языка программирования Java. Осуществление редактирования, добавления информации и поиска по архивам данных.

    дипломная работа [2,1 M], добавлен 30.09.2016

  • Способы построения остовного дерева (алгоритма поиска в глубину и поиска в ширину). Вид неориентированного графа. Понятие и алгоритмы нахождения минимальных остовных деревьев. Последовательность построения дерева графов по алгоритмам Крускала и Прима.

    презентация [22,8 K], добавлен 16.09.2013

  • Организация возможности просмотра текстовых файлов и осуществления поиска нужных слов в тексте. Редактирование текста (шрифт, размер). Алгоритм поиска подстроки в строке (метод Кнута-Морриса-Пратта). Загрузка текста из файла (с расширением .txt).

    курсовая работа [2,2 M], добавлен 29.05.2013

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

    дипломная работа [177,1 K], добавлен 24.06.2012

  • Расширяемый язык разметки XML. Описание типа документа DTD. Значение XML и платформы Java. Обзор стандартных анализаторов DOM и SAX. Технология Java Servlet, Java Server Pages (JSP), JavaBeans. Общая функциональность программного продукта. Модель данных.

    курсовая работа [422,0 K], добавлен 21.02.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.