ВВЕДЕНИЕ 4
ГЛАВА 1. ОБЗОР СУЩЕСТВУЮЩИХ ИССЛЕДОВАНИЙ 7
ГЛАВА 2. ПРОВЕДЕНИЕ ЭКСПЕРИМЕНТОВ В ОКРУЖЕНИИ, СОСТОЯЩЕМ ИЗ ОДНОЙ ЭВМ 9
ГЛАВА 3. ПРОВЕДЕНИЕ ЭКСПЕРИМЕНТОВ В РАСПРЕДЕЛЕННОМ ОКРУЖЕНИИ 16
ГЛАВА 4. КОЛОНОЧНОЕ ХРАНЕНИЕ ДАННЫХ 24
ГЛАВА 5. ПРОВЕДЕНИЕ ЭКСПЕРИМЕНТОВ С JSON-ДОКУМЕНТАМИ 31
ЗАКЛЮЧЕНИЕ 37
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ 38
ПРИЛОЖЕНИЕ 41
Последнее десятилетие связано с появлением и стремительным развитием класса систем управления данными под названием NoSQL. Впервые этот термин использовал Карло Строцци в 1998 году для названия небольшой СУБД его собственной разработки, предназначенной для работы в контексте распределенных архитектур. В ней он отказался от языка SQL и поддержки ACID-транзакций (Atomicity, Consistency, Isolation, Durability - Атомарность, Согласованность, Изолированность, Постоянство хранения) [1]. На данный момент чаще всего это слово применяют в смысле «Not-Only- SQL», т.е. «Не-Только-SQL».
Одной из главных причин популярности такого рода систем является необходимость расширения вычислительных архитектур «по горизонтали», т.е. не наращивания мощи отдельных узлов, а добавления новых к уже существующим. Представить работу традиционных SQL-, а точнее реляционных систем в таких условиях довольно трудно из -за сложностей реализации транзакций в распределенной среде.
Несмотря на то, что NoSQL-системы существуют довольно продолжительное время, на сегодняшний день существует относительно небольшое число исследований на тему сравнения их производительности с реляционными системами. Имеющиеся работы зачастую не позволяют получить полной картины, т.к. либо описывают эксперименты узкой направленности (например, сравнение временных затрат только на операции вставки данных), либо имеют в качестве объектов исследования специализированные и редко применяемые СУБД.
В рамках данной работы предлагается рассмотреть довольно известные PostgreSQL и MongoDB.
MongoDB [2] - документная СУБД, разрабатываемая однойименной компанией (ранее - 10gen). MongoDB имеет широкий функционал и на данный момент является одной из самых популярных NoSQL систем. MongoDB позволяет оперировать JSON-документами, хранящимися в коллекциях, которые являются аналогом привычных SQL-таблиц. Для работы с документами предусмотрены операции поиска, вставки, удаления и обновления. Для поиска документов в коллекции используется метод запросов по образцу, поддерживаются сортировка, проекция, просмотр результатов запроса с помощью курсора. Масштабируемость в MongoDB достигается за счёт разделения документов из коллекции по узлам на основании выбранного ключа (shard key). Поддерживается асинхронная репликация в режиме «главный-подчиненный»: операции записи обрабатываются только главным узлом, а чтения могут осуществляться как с главного узла, так и с одного из подчиненных. Клиент может работать в разных режимах: асинхронном (не дожидаясь отклика) или блокирующем (ожидая подтверждения от существующих в распределенной сети узлов). Таким образом, MongoDB поддерживает различные модели согласованности в зависимости от того, разрешены ли чтения с вторичных узлов и от скольких узлов ожидаются подтверждения при записи. Эта система используется в большом числе крупных компаний и проектов, среди которых SourceForge, Foursquare, The Guardian, Forbes, The New York Times и другие [3].
В свою очередь, PostgreSQL [4] - это объектно-реляционная система управления базами данных, которая была разработана в научном компьютерном департаменте Беркли Калифорнийского Университета. Это продукт с открытым исходным кодом, он поддерживает большую часть стандарта SQL: комплексные запросы, внешние ключи, триггеры, транзакционная целостность, многоверсионное управление параллельным доступом и т.д.
Целью работы является исследование производительности баз данных PostgreSQL и MongoDB с точки зрения выполнения запросов к хранимым данным для определения типов задач, в которых применение данных СУБД является оправданным.
Поэтому были обозначены следующие задачи:
• изучение технической документации по обозначенным СУБД и имеющихся исследований схожей тематики;
• проектирование структуры таблиц/коллекций, в которых будут храниться данные;
• заполнение полученной структуры данными;
• проведение экспериментов на основе различных запросов с измерением времени выполнения;
• анализ результатов.
В процессе выполнения данной магистерской диссертации были решены задачи обзора существующих исследований схожей тематики, подготовки тестовых данных, ознакомления с техническими аспектами работы с СУБД PostgreSQL, MongoDB, распределенными средами и обертками внешних данных. Анализ результатов соответствующих экспериментов привел к следующим выводам:
• PostgreSQL опережает MongoDB на операциях вставки данных даже в распределенном окружении и с использованием JSON-документов, что опровергает существующее среди специалистов мнение о преимуществе MongoDB в задачах логирования информации. Стоит также отметить выигрыш SQL СУБД в аналитических запросах;
• MongoDB функционирует быстрее PostgreSQL в подавляющем большинстве задач по работе с JSON-документами;
• Результаты экспериментов показали лидерство MongoDB в индексированном поиске. Таким образом, применение данной СУБД является оправданным для хранения редко изменяющихся и часто читаемых данных (например, в базах знаний, словарях, справочниках);
• Денормализация данных, как способ превентивного присоединения кортежей в MongoDB, является вполне допустимым решением задачи, что особенно ярко это проявляется на больших объемах данных. Однако стоит отметить, что решение о денормализации нужно принимать исходя из оценок затрат на поддержание согласованности;
• На сегодняшний день рассмотренные в работе расширения над PostgreSQL не могут считаться подходящими решениями в области серьезных производственных задач. По большей части это связано с наличием существенных технических ограничений в отдельных аспектах работы указанных модификаций.
1. Strozzi C., NoSQL: A Relational Database Management System [Электронный ресурс]. URL: http: //www. strozzi. it/cgi-bin/CSA/tw7/I/en US/nosql/Homeo%o20Page [Дата обращения: 10 декабря 2015].
2. Бэнкер К., MongoDB в действии. - М.: ДМК Пресс, 2012. - 394 с.
3. MongoDB Production Deployments [Электронный ресурс]. URL: http://www.mongodb.org/about/production-deployments/. [Дата обращения: 10 декабря 2015].
4. Hasso Plattner. A common database approach for OLTP and OLAP using an in-memory column database. Proceedings of the 2009 ACM SIGMOD International Conference on Management of data (pages 1-2).
5. Parker Z., Poe S., Vrbsky S. Comparing NoSQL MongoDB to an SQL DB, Proceedings of the 51st ACM Southeast Conference. - NY: ACM New York, 2013. - 6 p.
6. Postgres Outperforms MongoDB and Ushers in New Developer Reality [Электронный ресурс]. URL: http://www.enterprisedb.com/postgres-plus-edb- blog/marc-linster/postgres-outperforms-mongodb-and-ushers-new-developer- reality [Дата обращения: 10 декабря 2015].
7. Rick Cattell. Scalable SQL and NoSQL data stores. ACM SIGMOD Record, Volume 39 Issue 4, December 2010. - NY: ACM New York. - p.12-27.
8. Veronika Abramova, Jorge Bernardino, Pedro Furtado. Which NoSQL Database? A Performance, Overview Open Journal of Databases (OJDB), Volume 1, Issue 2, 2014. - Lubeck: RonPub. - p.17-24.
9. Data generator: free tool to generate test data. [Электронный ресурс]. URL: http://www.yandataellan.com/ [Дата обращения: 20 декабря 2016].
10. Release Notes for MongoDB 3.2 - MongoDB Manual 3.2 [Электронный ресурс]. URL: https://docs.mongodb.org/manual/release-notes/3.2/#aggregation- framework-enhancements [Дата обращения: 15 декабря 2015].
11. Overview | Postgres-XL [Электронный ресурс]. URL: http://www.postgres-xl.org/oyerview/ [Дата обращения: 10 мая 2016].
12. ToroDB | 8KData [Электронный ресурс]. URL: https://www.8kdata.com/torodb [Дата обращения: 10 мая 2016].
13. Доклады конференции PgConfRussia 2016: CitusDB: расширение для масштабирования PostgreSQL [Электронный ресурс]. URL: http://www.postgres-xl.org/oyerview/ [Дата обращения: 10 мая 2016].
14. Облачные серверы и хостинг Elastic Compute Cloud (EC2) - AWS [Электронный ресурс]. URL: http://aws.amazon.com/ru/ec2/. [Дата обращения: 10 мая 2016].
15. Daniel J. Abadi, Peter A. Boncz, Stavros Harizopoulos. Column-oriented database systems. Proceedings of the VLDB Endowment, Volume 2 Issue 2, August 2009 (pages 1664-1665).
...