В статье рассматриваются реляционный и нереляционный подход к созданию баз данных, причины их появления, основные принципы их работы и дается ответ на вопрос: системы управления базами данных какого подхода более востребованы.
Ключевые слова: реляционные базы данных, нереляционные базы данных, SQL, NoSQL, ACID, BASE.
Множество различных областей и специальностей имеют потребность в хранении и доступу к структурированной информации. С изобретением компьютера начался процесс переноса информации с бумажных носителей на электронные. Результатом этого процесса стало появление баз данных (БД) и систем управления базами данных (СУБД), появилось разделение СУБД по подходам. При создании своих первых проектов с использованием СУБД, каждый разработчик должен ответить на несколько вопросов: «Какой тип СУБД будет более эффективным для решения поставленной задачи?», «На каких принципах основан этот тип СУБД?» и «Какую СУБД следует выбрать для решения задачи?». Одним из основных факторов для ответов на эти вопросы является популярность — многие задачи и программные решения существуют в области уже давно и люди уже отвечали на эти вопросы. Рассмотрим историю появления разных типов СУБД, их принципы и то, какие СУБД пользуются большей популярностью.
Прежде чем начать разговор о реляционных и нереляционных базах данных, необходимо дать определение базам данных и системам управления базами данных.
Базы данных — набор взаимосвязанных сведений (фактов), относящихся к определенной предметной области, организованных по определенным правилам, которые могут предусматривать их клиаративное представление, хранение и манипулирование ими [1].
Система управления базами данных в технической деятельности — комплекс программных средств для создания баз данных, хранения и поиска в них необходимой технической информации [1].
БД и СУБД принято разделять на два типа — реляционные и нереляционные. Рассмотрим каждый из них подробнее.
Начнем с рассмотрения реляционных баз данных. В публикациях компании Oracle указывается, что в самых первых базах данных, данные имели уникальную структуру, из-за чего для разработки какого-либо приложения необходимо было хорошо знать эту структуру. Очевидно, что реляционная структура была создана для оптимизации приложений и облегчения их обслуживания. Реляционная структура предоставила стандартный способ представления данных и отправки запросов [2]. Затем появился язык структурированных запросов — SQL. Он оптимизировал запросы к базам данных. Именно из-за стандартизации и оптимизации реляционные базы данных стали самыми распространёнными [2].
Нереляционные базы данных также называются NOSQL, что означает Not Only SQL. Очевидно, что базы данных до появления реляционных были нереляционными. Однако, этот термин, в тот смысле, в котором мы используем его сейчас, появился в середине 2009 года с базой данных Карло Строцци с открытым исходным кодом [3]. Ее особенности заключаются в использовании шелловских скриптов UNIX систем вместо SQL и хранении всех данных в качестве ASCII файлы. Указываются следующие причины появления нереляционных баз данных [3]:
1) Увеличение объема хранимых данных. Очевидно, что с развитием технологий различных областей, количество хранимой информации увеличивалось, вместе с количеством информации увеличивалась цена за хранение и обработку, а значит появилась необходимость в более эффективных методах хранения и обработки этой информации, позволяющих снизить цену.
2) Взаимосвязанность. Информация стала все более связана между собой, одна страница указывает на другую, теги ссылающиеся на источники, справочники указывающие взаимодействия между терминами и т. д.
3) Области со слабоструктурированной информацией. Рассмотрим на примере товара в магазине. У нас есть 5 товаров в одном отделе, у каждого из этих товаров есть несколько десятков свойств, при этом у каждого есть несколько свойств, которые присущи не всем остальным товарам. Появляется новый товар, с некоторым количеством новых свойств. Эти свойства нужны только ему, а предыдущим товарам не нужны, однако с реляционными базами данных структуру все равно придется менять. Очевидно, что с увеличением количества принципиально новых товаров, проблема будет становиться глобальнее.
4) Архитектура. Архитектура в 80-ых годах, когда реляционные БД появились и стали популярными, и в 2000-ых, когда стали снова появляться и активно использоваться нереляционные БД, была разной. Если в 80-ых использовалась архитектура с одним компьютером, называвшимся мейнфрейм (mainframe), и одной базой данных, то уже в 2000-ых большое распространение имеет уже клиент-серверная архитектура. Новая архитектура давала новые возможности и ставила новые задачи. И реляционные БД не всегда были эффективным решением для этих задач.
Рассмотрим принципы каждого подхода, а затем перейдем к задачам, которые эти подходы позволяют решать.
Реляционные СУБД основаны на принципах ACID (ACID — atomicity, consistency, isolation, Durability):
1) Atomicity — атомарность. Это свойство гарантирует, что выполняться либо все запросы транзакции, либо ни один из запросов. Если хоть одна часть транзакции выполняется с ошибкой, то вся транзакция не выполнится.
2) Consistency — согласованность. Это свойство гарантирует, что все данные будут соответствовать всем предопределенным правилам и ограничениям, применяемым к БД.
3) Isolation — изолированность. Это свойство гарантирует, что все транзакции будут выполнятся изолированно, то есть ни одна транзакция не затронет другую пока последняя не выполнилась.
4) Durability — стойкость. Это свойство гарантирует, что любые изменения, внесенные транзакцией, должны остаться на всегда, даже если сразу после транзакции произошла ошибка, приведшая к завершению работы БД. То есть если БД успешно выполнила транзакцию, то она действительно должна быть применена.
Нереляционные СУБД основаны на принципах BASE (BASE — Basic Availability, Soft state, Eventual consistency):
1) Basic availability — базовая доступность. Нереляционные СУБД используют распределенный подход к базам данных. Вместо поддержания одного большого хранилища данных и фокуса на его отказоустойчивости, базы данных NoSQL распределяют данные по многим системам хранения с высокой степенью репликации. Это гарантирует завершение любого запроса.
2) Soft state — гибкое состояние. Отказ от согласованности ACID приводит к тому, что задача согласованности данных лежит на разработчике, а не на базе данных. То есть, состояние системы может изменяться даже без ввода новых данных для обеспечения согласованности.
3) Eventual consistency — согласованность в конечном итоге. Даже если в какой-то момент времени данные не согласованны, обязательно должен наступить момент, когда данные согласованы.
Реляционные базы данных отлично подходят для областей, где важна надежность, например, банковский сектор, где ошибка при переводе с одного счета на другой может стоить больших денег. Нереляционные базы данных отлично подходят для областей, где важна возможность быстрого и массового доступа к данным, например, поисковые системы.
Подведем итог рассмотрев пять самых популярных СУБД по данным нескольких сайтов и процент запросов по ним:
1) По данным сайта PYPL (PopularitY of Programming Languange), основанных на запросах в Google [4] — Oracle Database, MySQL, Microsoft SQL Server, Microsoft Access. Данные представлены в виде диаграммы на рис. 1.
Рис. 1. Круговая диаграмма популярности СУБД (PYPL)
2) Данные сайта Stack Overflow [5] выражены в процентах, однако сумма процентов составляет больше 100 %, поэтому для диаграммы на рис. 2 проценты были пересчитаны. Пять самых популярных СУБД (в скобках неизмененный процент запросов с сайта Stack Overflow)– MySQL (55.6 %), PostgreSQL (36.1 %), Microsoft SQL Server (33.0 %), SQLite (31.2 %), MongoDB (26.4 %).
Рис. 2. Круговая диаграмма популярности СУБД (Stack Overflow)
Oracle Database — реляционная СУБД. Она популярна у больших компаний и распространяется по коммерческой лицензии. Хотя у этой СУБД есть бесплатная версия, она имеет серьезные ограничения и некоторые нововведения, давно использующиеся бесплатными конкурентами, либо отсутствуют в бесплатной версии, либо добавляются в нее через несколько лет после популяризации. Учитывая эти два свойства, ее первое место вызывает вопросы. По данным Stack Overflow она занимает 8 позицию. Если объединять результаты, то она занимает примерно третье место.
MySQL — реляционная СУБД. По результатам обоих сайтов она является одной из самых популярных, занимая первое и второе место у Stack Overflow и PYPL соответственно. Учитывая то, что Oracle занимает третье место в нашем списке, первое место однозначно достается MySQL. MySQL является бесплатной и очень популярной для сайтов. Ее разработка и поддержка осуществляется компанией Oracle.
Microsoft SQL Server — реляционная СУБД. Эта СУБД от Microsoft имеет бесплатную версию. Ее популярность легко объясняется простотой в использовании, функционалом схожим с MySQL и бесплатностью. Она занимает позицию, наиболее близкую ко второму месту.
Microsoft Access — реляционная СУБД. Эта СУБД тоже от Microsoft, но ее отличие от предыдущей СУБД от Microsoft в необходимости покупать лицензию. Самые заметные особенности — встроенный язык VBA для написания приложений и вхождение данной СУБД в комплект Microsoft Office. Она сдвигается ближе к шестому и седьмому месту из-за отсутствия в списке Stack Overflow.
PostgreSQL — реляционная СУБД. Она распространена на UNIX системах и является бесплатной. Обладает схожим функционалом с MySQL и Microsoft SQL Server. Она занимает вторую позицию в списке Stack Overflow и 6 в PYPL, что делает наиболее подходящей для 4 места.
SQLite — реляционная СУБД. Ее отличительная особенность в том, что она является компактной встраиваемой СУБД, то есть она встраивается в проект как библиотека. Она является бесплатной. Как Microsoft Access сдвигается ближе к шестому и седьмому месту из-за присутствия только в одном списке.
MongoDB — нереляционная СУБД. Она бесплатна, проста в освоении и использует JSON-подобные документы для описания данных. MongoDB занимает пятое место в обоих опросах и нет никаких предпосылок, чтобы изменить ее место в списке.
Конечный список популярности рассмотренных СУБД выглядит так:
1) MySQL.
2) Microsoft SQL Server.
3) Oracle Database.
4) PostgreSQL.
5) MongoDB.
6) SQLite.
7) Microsoft Access.
Четыре из пяти самых популярных СУБД являются реляционными. Тут присутствуют и платные СУБД, часто используемые средними и большими компаниями, и бесплатные СУБД, используемые малыми компаниями и разработчиками без команды. Только одна из семи упомянутых СУБД является нереляционной. Статистика говорит сама за себя — разработчики решают большую часть задач используя преимущества реляционного подхода.
Литература:
1. ГОСТ Р 43.0.11–2014. — Текст: электронный // Электронный фонд правовых и нормативно-технических документов [сайт]. — URL: https://docs.cntd.ru/document/1200113357 (дата обращения 31.05.2021).
2. Что такое реляционная база данных. — Текст: электронный // Oracle [сайт]. — URL: https://www.oracle.com/ru/database/what-is-a-relational-database/ (дата обращения 31.05.2021).
3. NoSQL. — Текст: электронный // Национальная библиотека имени Баумана [сайт]. — URL: https://ru.bmstu.wiki/NoSQL (дата обращения 31.05.2021).
4. TOPDB Top Database index. — Текст: электронный // PYPL [сайт]. — URL: https://pypl.github.io/DB.html (дата обращения 31.05.2021).
5. Stack Overflow Developer Survey Results. — Текст: электронный // Stack Overflow [сайт]. — URL: https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved (дата обращения 31.05.2021).