Тип работы:
Предмет:
Язык работы:


Разработка генератора языка запросов с регулируемыми оптимизациями для эффективного поиска в иерархических структурах

Работа №126905

Тип работы

Бакалаврская работа

Предмет

программирование

Объем работы37
Год сдачи2023
Стоимость4650 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
29
Не подходит работа?

Узнай цену на написание


Введение 3
Постановка задачи 4
1. Обзор альтернативных вариантов решения поставленной задачи 5
1.1. gRPC 5
1.2. GraphQL 5
1.3. Графовые базы данных 5
1.4. TeamCity searchQL 5
2. Описание структур 7
2.1. Схема генератора 7
2.2. Язык запросов 9
3. Исполнение запроса 11
3.1. Парсинг запроса 11
3.2. Построение графа исполнения 12
3.3. Вычисление и оптимизации 14
3.4. Вычисление резултата в зависимости от типа вершины 16
3.5. Порядок вычисления 32
4. Генерация кода 34
4.1. Парсеры 34
4.2. Объекты 34
4.3. Граф исполнения 35
4.4. Исполнение запроса 35
Заключение 36
Список литературы 37

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

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе работы удалось:
• разработать синтаксис языка, который позволяет делать запросы про­извольной сложности к иерархической структуре
• реализовать генератор кода для парсера и вычислителя этого языка
• разработать и реализовать эффективный алгоритм вычисления запро­сов, с возможностью регулировать оптимизации на уровне схемы гене­ратора
• с помощью генератора кода был создан пример языка поиска для струк­туры сервера TeamCity. [7]
Таким образом задав схему генератора для произвольной иерархиче­ской структуры и реализовав переходы по ней, можно искать произвольный объект с условием на этом объект и с условием на то, в каких объектах его нужно искать. Также при предоставлении некоторой дополнительной ин­формации о структуре и новых способов доступа к ее объектам, возможна оптимизация вычисления запроса, при помощи которой во время вычисления будет затронуто существенно меньшее количество объектов. Весь код досту­пен по следующей ссылке: https://github.com/ilyavoronin/search-ql- generator


[1] TeamCity documentation. URL: https://www.jetbrains.com/help/ teamcity/teamcity-documentation.html
[2] TeamCity searchQL. URL: https://github.com/JetBrains/teamcity- search-ql
[3] gRPC. URL: https://grpc.io/docs/
[4] GraphQL specification. URL: https://spec.graphql.org/October2021/
[5] Neo4j documentation. URL: https://neo4j.com/docs/
[6] Dgraph: Synchronously Replicated, Transactional and Distributed Graph Database. URL: https://github.com/dgraph-io/dgraph/blob/master/ paper/dgraph.pdf
[7] Пример сгенерированного языка запросов. URL: https://github.com/ ilyavoronin/gen-search-ql-tc-example
[8] Noonan, Robert E. "An algorithm for generating abstract syntax trees."Computer Languages 10.3-4 (1985): 225-236.
[9] Tarjan, Robert. "Depth-first search and linear graph algorithms."SIAM journal on computing 1.2 (1972): 146-160.
[10] KotlinPoet. URL: https://square.github.io/kotlinpoet/
[11] Hutton, Graham, and Erik Meijer. "Monadic parser combinators."(1996).
[12] Kotlin reflection. URL: https://kotlinlang.org/docs/reflection.html#function-references


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ