ВВЕДЕНИЕ 6
1. ОБЗОР ЛИТЕРАТУРЫ 9
1.1. Строчная модель хранения данных 9
1.2. Колоночная модель хранения данных 10
1.3. Методы интеграции колоночных и строковых СУБД 11
1.4. Разработка приложений для PostgreSQL 13
1.5. Вывод 14
2. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 15
2.1. Колоночные индексы 15
2.2. Требования к системе 16
2.2.1. Функциональные требования 16
2.2.2. Нефункциональные требования 17
2.2.3. Варианты использования системы 17
2.2.4. Детализация прецедентов 17
2.3. Вывод 19
3. ПРОЕКТИРОВАНИЕ 20
3.1. Диаграмма классов 20
3.2. Создание колоночных индексов 22
3.3. Выполнение запроса 24
3.4. Процесс PostgreSQL и драйвер КСОП 26
3.5. Вывод 27
4. РЕАЛИЗАЦИЯ 28
4.1. Пример обработки запроса 28
4.2. Создание процесса драйвера из СУБД 31
4.3. Анализ логического плана 33
4.4. Формирование запроса для КСОП 34
4.5. Изменение логического плана 36
4.6. Вывод 37
5. ТЕСТИРОВАНИЕ 38
5.1. Модульное тестирование 38
5.2. Интеграционное тестирование 39
5.3. Функциональное тестирование 40
5.4. Вывод 41
ЗАКЛЮЧЕНИЕ 42
СПИСОК ЛИТЕРАТУРЫ 43
ПРИЛОЖЕНИЯ 46
Приложение 1 46
Приложение 2 47
Приложение 3 48
Актуальность
В настоящее время сверхбольшие данные оказывают существенное влияние на современные технологии обработки данных. По данным компании IDC в 2016 году глобальное количество накопленных данных составило 16 зеттабайт. К 2020 году, по прогнозам, человечество сформирует 40-44 зеттабайт информации, а к 2025 - 136 зеттабайт. При этом современные технологии не в состоянии обеспечить обработку ста процентов данных такого объема [11].
Для обработки больших данных идеально подходят высокопроизводительные вычислительные системы [14], которые представлены системами с кластерной архитектурой, оснащенными многоядерными ускорителями. Эти вычислительные системы также могут использоваться и для хранения больших данных. К настоящему времени наблюдается большой прогресс в разработке технологий параллельных баз данных. Основным местом хранения данных в кластерной системе выгоднее всего выбрать оперативную память, за счет экспоненциального снижения отношения стоимость / размер [12].
Хранилища данных, для которых характерны запросы типа OLAP [16], являются одним из самых важных классов приложений, связанных с обработкой больших данных. Для таких приложений выгодно использовать колоночное представление данных, позволяющее получить преимущество в скорости выполнения запросов на выборку данных, за счет уменьшения количества обменов с диском. Однако существенным недостатком колоночного представления данных является то, что СУБД, использующие это преставление, существенно уступают строковым СУБД в части выполнения запросов класса OLTP.
Таким образом, актуальной является задача разработки и исследования методов интеграции колоночных хранилищ данных и реляционных СУБД.
Цель и задачи работы
Целью данной работы является разработка системы интеграции реляционной СУБД PostgreSQL и колоночных хранилищ данных. Разрабатываемая система предназначена для эффективного выполнения OLAP запросов над сверхбольшими базами данных с использованием колоночных индексов, что позволит совместить преимущества реляционных СУБД в выполнении запросов класса OLTP и колоночных хранилищ в выполнении запросов класса OLAP. Система должна предоставлять пользователям возможность выполнения запросов с использованием колоночных индексов, что позволит получить существенное уменьшение временных затрат.
Для достижения данной цели необходимо решить следующие задачи:
1) выполнить обзор литературы по теме работы;
2) изучить этапы компиляции и исполнения запроса в PostgreSQL, освоить сборку СУБД из исходных кодов;
3) сформулировать требования к системе интеграции колоночного хранилища данных и PostgreSQL;
4) предложить методы создания колоночных индексов и выполнения запроса с использованием колоночных индексов;
5) спроектировать и реализовать систему;
6) протестировать работу системы.
Структура и объем работы
Работа состоит из введения, пяти глав, заключения, библиографии и приложений. Объем работы составляет 42 страницы, объем библиографии - 23 источника, объем приложений - 3 страницы.
В первой главе дается обзор литературы, посвященной колоночным хранилищам данных, рассматриваются способы интеграции преимуществ колоночной модели данных в строковые СУБД.
Вторая глава содержит описание колоночных индексов, колоночного сопроцессора баз данных (КСОП), процесса выполнения запроса с использованием колоночных индексов, описание и анализ требований к системе 7
интеграции КСОП и PostgreSQL.
В третьей главе описано проектирование системы интеграции колоночного сопроцессора баз данных и реляционной СУБД PostgreSQL. В этой главе подробно рассмотрены алгоритмы создания и использования колоночных индексов.
Четвертая глава посвящена реализации системы, в виде драйвера КСОП, разработанного с использованием языка программирования Python.
В пятой главе представлены результаты тестирования разработанной системы, описаны использованные методологии тестирования.
В заключении кратко приведены результаты работы.
Приложения содержат JSON-схему оператора выполнения запроса на языке CCOPQL, пример целочисленной базы данных, полную спецификацию тестовых случаев для функционального тестирования.
Данная работа посвящена разработке и исследованию методов интеграции колоночного сопроцессора и реляционной СУБД PostgreSQL, а также разработке драйвера КСОП, реализующего эти методы. В ходе проделанной работы мной были решены следующие задачи:
• проанализированы существующие подходы к интеграции достоинств колоночной модели хранения данных в реляционные СУБД, для реализации была выбрана модель интеграции на основе колоночного сопроцессора;
• изучены этапы компиляции и исполнения запроса в PostgreSQL, освоена сборку СУБД из исходных кодов;
• предложены алгоритмы создания колоночных индексов и выполнения запроса с использованием колоночных индексов;
• на основе выбранной модели реализованы алгоритмы создания колоночных индексов и выполнения запроса с использованием колоночных индексов, реализованные в виде отдельного приложения - драйвера КСОП, Для реализации использовался язык программирования Python;
• произведено тестирование системы с использованием тестового набора данных и тестовых запросов. Система успешно прошла предложенные тесты.
В качестве направлений дальнейших исследований можно выделить следующие:
• разработка методов анализа сложных SQL-запросов с несколькими операциями соединения или вложенными операциями SELECT;
• настройка интеграции со стороны КСОП: получение запроса, отправка ТПВ, сжатие колоночных индексов для хранения;
• представление системы в виде облачного сервиса.
1. Abadi D.J., Madden S.R., Ferreira M. Integrating compression and execution in column-oriented database systems. // Proceedings of the 2006 ACM 126 SIGMOD international conference on Management of data, 2016. - P. 671-682.
2. Any Python Tree Data. [Electronic resource] URL: https://anytree.readthedocs.io/ (date of access: 03.04.2018).
3. Autotools introduction. [Electronic resource] URL: http://www.gnu.org/software/automake/manual/html_node/Autotools- Introduction.html (date of access: 02.04.2018).
4. Bernstein P.A., Goodman N., Hadzillacos V. Concurrency Control and Recovery in Database Systems. - USA: Addison-Wesley, 1986. - 124 p.
5. Bison - GNU project. [Electronic resource] URL: https://www.gnu.org/software/bison/ (date of access: 03.04.2018).
6. Bruno N. Teaching an Old Elephant New Tricks. [Electronic resource] URL: http://www-db.cs.wisc.edu/cidr/cidr2009/Paper_2.pdf (date of access: 04.02.2018).
7. JSONSchema Documentation. [Electronic resource] URL: https://pypi.python.org/pypi/jsonschema (date of access: 02.04.2016).
8. PostgreSQL Functioning and Internels. [Electronic resource] URL: https://www.cse.iitb.ac.in/infolab/Data/Courses/CS631/PostgreSQL- Resources/PostgreSQLInternels.pdf (date of access: 03.04.2018).
9. PostgreSQL Source Code Documentation. [Electronic resource] URL: https://doxygen.postgresql.org/ (date of access: 03.04.2018).
10. Ramamurthy R., Dewitt D., Su Q. A case for fractured mirrors. // Proceedings of the VLDB Endow, 2002. - Vol. 12. - No. 2. - P. 89-101.
11. Reinsel. D., Rydning. J. Data Age 2025: The Evolution of Data to Life-Critical. [Electronic resource] URL: https://www.seagate.com/files/www- content/our-story/trends/files/Seagate-WP-DataAge2025-March-2017.pdf (date of access: 13.03.2018).
12. Scherger M. Design of an In-Memory Database Engine Using Intel Xeon Phi Coprocessors. // Proceedings of the International Conference on Parallel and Distributed Processing Techniques and Applications (PDPTA’14), 2014. - P. 21-27.
13. Unit testing framework. [Electronic resource] URL: https://docs.python.org/3/library/unittest.html (date of access: 28.04.2018).
14. Williams M.H., Zhou S. Data Placement in Parallel Database Systems. // Parallel database Techniques. IEEE Computer Society, 1998. - P. 203-218.
15. Бейзер Б. Тестирование чёрного ящика. Технологии функционального тестирования программного обеспечения и систем. - СПб: Питер, 2004. - 320 c....23