Научная статья на тему 'Проверка времени исполнения сгенерированных запросов к графовой базе данных'

Проверка времени исполнения сгенерированных запросов к графовой базе данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
293
76
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Крестов С.Г., Строганов Ю.В.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Крестов С.Г., Строганов Ю.В.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Проверка времени исполнения сгенерированных запросов к графовой базе данных»

Проверка времени исполнения сгенерированных запросов

к графовой базе данных

Крестов С.Г., Строганов Ю.В., МГТУ им Н.Э. Баумана ksgiv37@gmail. com

Аннотация

Данная статья посвящена тестированию разработанного программного

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

1 Введение

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

Для работы СУБД зачастую используют специальный формальный язык,

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

Этой проблеме было посвящено несколько проектов. В частности, в статье [3] был рассмотрен аналитический подход и представление в виде концептуального графа. Однако не были описаны подробно возникавшие в процессе разработки коллизии и сложности, в частности, построение независимых графов. Также не было рассмотрено конкретных алгоритмов трансляции запросов.

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

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

Вслед за реализацией системы перевода запросов встаёт вопрос об исследовании производительности составленных ею запросов.

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

2 Система составления запросов

Для данной работы была выбрана графовая база данных Neo4j с языком Cypher. Главной особенностью этой связки будет возможность составлять запросы по шаблону, в котором описываются некоторые свойства объекта и по которому затем осуществляется поиск объектов, соответствующих этим свойствам.

2.1 Технические средства

Neo4j — это NoSQL база данных, ориентированная на хранение графов.

Neo4j предоставляет API на Python, обширную документацию, программу поддержки начинающих разработчиков, удобный Web интерфейс для свой базы данных и т.д.

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

Neo4j напрямую не поддерживает OWL, однако из-за хорошей документации и обширного сообщества была выбрана именно Neo4j [1].

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

Одним из преимуществ такой базы данных также является декларативный язык для запросов, Cypher. Он использует схожие с SQL операторы, но в контексте графовых баз данных. Поиск по базе данных осуществляется через сопоставление данных с некоторым шаблоном, задаваемым через ключевое слово MATCH, однако традиционный SQL WHERE тоже поддерживается [2].

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

2.2 Составление запросов

Запрос составляется через генерацию дерева запроса - внутреннего объекта системы составления запросов,

представляющего все связи и свойства объектов, указанных в запросе. Затем по дереву составляется запрос на языке Cypher.

Запрос генерируется рекурсивно для каждого объекта в дереве в следующие этапы.

• Объекту присваивается имя переменной.

• Происходит обход списков свойств и добавление свойств в запрос при помощи имени переменной и оператора MATCH.

• Происходит обход связей и добавление связей в запрос при помощи оператора MATCH и ассоциация связанных объектов с переменными запроса.

• Для каждой связанной переменной вызывается алгоритм с второго шага. Запрос на языке Cypher представляет собой

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

Пример запроса всех фильмов ужасов, спродюссированных человеком, родившимся в 1974 году:

MATCH ( ( SGNL ) -[: P r o d uce d _ b y ]-> (VMBQ) ) MATCH (SGNL : Film s : H o r r o r : H o r r o r { } ) MATCH (VMBQ : P e r s o n { Bi rt h _ Y e a r : " 1 9 7 4 " } ) r e t u r n SGNL

3 Средства для проверки свойств

запросов

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

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

Поскольку ручное составление запросов потребует слишком много времени, используется вспомогательная программа на языке Python, которая генерирует внутреннее представление запроса (дерево), затем к дереву применяется алгоритм составления запроса, что позволяет получить запросы для тестирования.

Для решения задачи необходимы данные из базы преобразованные во внутреннее представление. Затем, разбив внутреннее представление на подзапросы и комбинируя их, будем получать запросы с новыми свойствами.

3.1 Эмуляция клиента

В результате работы эмуляции необходимо получить множество запросов определяющих объект однозначно необходимо-достаточным множеством признаков. Т.е. при исключении одного признака объект перестаёт определяться однозначно.

Процесс эмуляции клиента происходит по принципу увеличения количества

определяющих признаков.

• Создаётся пустое множество результата

• Составляется список признаков объектов.

• Выбираются признаки, определяющие объект однозначно (О).

• Выбирается список свойств, не определяющих объект однозначно (Ц).

• Рабочее множество (W) инициализируется множеством с предыдущего шага.

• О добавляется в результат.

• В цикле до необходимой глубины запроса или опустошения W:

о каждый запрос из W дополняется

признаками из L (W'); о из W' исключаются запросы,

определяющие объект однозначно (О'); о объекты О' добавляются в результат; oW заменяется на W'. Полный список свойств объекта получается запросом к базе данных о самом объекте и об объектах, с ним связанных, при том для упрощения задачи, количество промежуточных объектов ограничивается.

Определение свойств и запросов, определяющих или не определяющих объект однозначно, выполняется путём составления запроса по свойству или списку свойств и проверки размера выборки.

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

3.2 Уменьшение времени генерации запросов

Из представленного выше алгоритма очевидно, что количество запросов растёт в геометрической прогрессии. И при

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

ограничено то оно получается конечно, но достаточно большим. Также ограничивается количество свойств в одном запросе. Однако, система остаётся перегруженной.

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

3.3 Составление сложных запросов

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

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

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

Пример простого запроса (все, кто родился в 1974):

MATCH (VMBQ : P e r s o n { Bi rt h _ Y e a r : " 1 9 7 4 " } ) r e t u r n VMBO

Пример сложного запроса (все фильмы ужасов спродюссированные людьми родившимися в 1974) :

MATCH ( ( SGNL ) -[: P r o d uce d _ b y ]-> (VMBQ) ) MATCH (SGNL : Film s : H o r r o r : H o r r o r { } ) MATCH (VMBQ : P e r s o n { Bi rt h _ Y e a r : " 1 9 7 4 " } )

г е t и г п SGNL

4 Экспериментальная часть

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

количества признаков

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

Выводы

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

Список литературы

1. Neo4j official page. Официальный сайт Neo4j URL: https://neo4j.com/. (дата обращения 08.01.2017).

2. Neo4j official documentation. Официальная документация Neo4j URL: . https ://neo4j. com/docs/ operations-

manual/current/tools/cypher-shell/. (дата

обращения 08.01.2017).

3. Акимов О. М., Шапцев В. А. Интеллектуализация и терфейса базы данных // Известия ТПУ. 2009. №5. URL:http://cyberleninka.ru/article/n/intellektualizat siya-interfeysa-bazy-dannyh (дата обращения: 09.03.2017).Научная библиотека КиберЛенинка: http : //cyberleninka. ru/article/ n/intellektualizatsiya-interfeysa-bazy-dannyh#ixzz4aoGbpFLU

4. Quepy. Страница проекта на github Quepy URL: https ://github.com/machinalis/quepy (дата обращения 08.03.2017).

5. OWL. Сайт веб стандарта W3. URL: https ://www. w3. org/OWL/ (дата обращения 08.03.2017).

Количество Время выполнения

признаков

1 0.0563

2 0.0563

3 0.0648

4 0.0798

5 0.0551

6 0.0582

i Надоели баннеры? Вы всегда можете отключить рекламу.