ВВЕДЕНИЕ 4
1. ПОДХОДЫ К ОРГАНИЗАЦИИ ХРАНЕНИЯ ДАННЫХ 7
1.1. Модели баз данных 7
1.1.1. Реляционный подход 7
1.1.2. Нереляционный подход 7
1.2. Сравнение реляционных и нереляционных баз данных 9
1.2.1. Масштабируемость 9
1.2.2. Зависимость от схемы данных 9
1.2.3. Транзакции 10
1.3. Мультимодельные базы данных и Polyglot Persistence 10
2. ОБЩАЯ АРХИТЕКТУРА 12
2.1. Используемые технологии 12
2.2. Структура взаимодействия 12
2.2.1. Инициализация классов 14
2.2.2. Классы-менеджеры 15
2.3. Стратегии хранения данных о внешних связях 16
2.3.1. Хранение внутри объекта БД (INNER) 16
2.3.2. Хранение информации о связях в отдельном хранилище (OUTER) 18
3. ОПЕРАЦИИ НАД ОБЪЕКТАМИ РАЗНЫХ МОДЕЛЕЙ 19
3.1. Получение связанных объектов 19
3.2. Добавление межмодельных связей 20
3.3. Удаление связей 21
4. СРАВНИТЕЛЬНЫЙ АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ
КЛАССИЧЕСКОГО И КОМБИНИРОВАННОГО ПОДХОДОВ 23
4.1. Запросы в рамках одной модели 24
4.2. Мультимодельные запросы 26
4.3. Специфичные для разных моделей запросы 28
ЗАКЛЮЧЕНИЕ 30
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 32
ПРИЛОЖЕНИЕ 35
На сегодняшний день наблюдается стремительный рост количества хранимой и обрабатываемой информации [1]. Эти данные являются разнородными, имеют различную структуру. В свою очередь, это привело к появлению многообразия хранилищ данных для более эффективного взаимодействия с разными видами информации.
На текущий момент наиболее распространенной является реляционная модель баз данных [2]. Реляционные БД предоставляют согласованность и целостность данных. В то же время они требуют заранее описанной структуры. Нереляционные решения, в свою очередь, являются более гибкими и хорошо подходят для частично структурированной и неструктурированной информации. Кроме того, с развитием технологии и увеличением объемов хранимых и обрабатываемых данных на первое место встаёт лёгкость горизонтального масштабирования и высокая скорость обработки запросов, которые также предоставляют базы данных NoSQL [3].
Каждый из подходов имеет собственные преимущества, которые проявляются при работе с различными видами информации. Стремление сочетать сильные стороны каждой БД привело к появлению гибридного подхода, сочетающего в себе SQL и NoSQL решения [4-6]. Основой такого подхода является не использование мультимодельных баз данных, а в использовании различных баз данных для разных задач в рамках приложения и обеспечения взаимодействия между этими базами.
В свою очередь, в силу распространенности реляционных хранилищ, большинство веб-фреймворков для взаимодействия с базой данных используют объектно-реляционное отображение (Object-Relational Mapping, ORM) [7]. Данное преобразование, как следует из названия, работает только с реляционными базами данных. Функциональность таких фреймворков во многом опираются на слой ORM, в связи с чем разработчик лишается возможности совместного использования реляционных и нереляционных баз данных.
Вышеуказанные решения [4-6], предоставляют собой интерфейсы, которые работают (или эмулируют эту работу) на уровне системы управления базами данных (СУБД). В данной работе рассмотрен подход, когда «межмодельное» (cross-model) взаимодействие переходит на уровень приложения. Пользователь-разработчик, самостоятельно определяет, к какому хранилищу принадлежат те или иные объекты отображения. При таком способе взаимодействия пользователь оперирует с интерфейсом, который похож на набор методов ORM, а перевод этих методов в нужный формат (в зависимости от места хранения объекта) и соблюдение целостности переходят на уровень разрабатываемого модуля.
Практическая значимость настоящей работы состоит в том, что будет предложен способ для комбинированного взаимодействия с базами данных многих моделей в рамках инфраструктуры веб-фреймворка, что позволит использовать данное решение при разработке веб-приложений. Кроме того, единый интерфейс взаимодействия позволяет использовать нереляционные базы данных с помощью средств стандартного ORM, что позволит, например, используя графовое хранилище, взаимодействовать с ним такими же средствами, как с реляционным.
Целью данной работы является разработка инструмента для взаимодействия приложения с базами данных различных моделей. Для реализации поставленной цели требуется решение следующих задач:
• Анализ средств для эффективного хранения информации о связях между объектами различных баз данных.
• Разработка модуля, который модифицирует средства стандартного объектно-реляционного отображения и позволяет совместно использовать несколько хранилищ для работы с данными.
• Предоставление унифицированного программного интерфейса приложения (API), который содержит методы для взаимодействия (добавление, редактирование, получение, удаление и пр.) с разными моделями.
• Сравнительный анализ производительности стандартных средств ORM и инструмента, который позволяет использовать несколько моделей данных.
В ходе выполнения работы были проанализированы различные модели для хранения данных, а также подходы к взаимодействию с данными многих моделей.
На основе подхода Polyglot Persistence был спроектирован и разработан модуль, который позволяет использовать разные хранилища для разных видов данные и при этом хранить информацию о межмодельных связях. Основой данного модуля служит набор методов, который предоставляет веб-фреймворк Django, что, в свою очередь, позволяет разработчикам при разработке приложений взаимодействовать с базами данных разных моделей так же, как и с реляционными и не вносить изменения в уже функционирующие системы.
Также, был проведен сравнительный анализ производительности при использовании баз данных одной и многих моделей, который показал, что при необходимости выполнения специфичных запросов, которые зависят от модели хранилища, разработанный инструмент позволяет добиться меньшего времени их выполнениях. При этом данный модуль не влияет на производительность при взаимодействии с объектами внутри одного хранилища. Кроме того, модуль предоставляет возможность, разбивая данные на разные модели, выполнять осуществлять взаимодействие, которое не
В дальнейшем планируется расширить функциональность разработанного модуля и добавить следующие функции:
• возможность соединения объектов двух классов разными типами связи;
• реализация сервисного хранилища для межмодельных связей с помощью реляционной или документоориентированной базы данных;
• возможно хранения внутри сущности связи из сервисного хранилища дополнительной информации;
• автоматическое удаление из сервисного хранилища объектов, которые не имеют действующих связей.