Кратко:
- В 2020 году каждый день генерировалось около 2,5 эксабайта данных.
- БД позволяет сохранять данные, извлекать из них те, которые нужны, и передавать пользователю.
- БД разделяют на реляционные и нереляционные.
- Реляционная БД - это набор таблиц и связей между ними.
- Для работы с реляционными БД используется SQL.
- В сервисах Yandex Cloud представлены популярные реляционные СУБД MySQL и PostgreSQL.
- Реляционные БД не всегда являются лучшим инструментом.
Реляционные базы данных
По оценкам аналитической компании Domo, в 2020 году в интернете каждый день генерировалось около 2,5 эксабайта (миллиарда гигабайт) данных. Но пока эти данные не собраны и не структурированы, они для нас бесполезны. БД позволяет сохранять данные, извлекать из них те, которые нужны, и передавать пользователю.
Поскольку и данные, и задачи пользователей различны, разработано довольно много систем управления базами данных (примерно 850). На этом и следующем уроках мы коротко расскажем, какие СУБД доступны в Yandex Cloud.
Обычно БД разделяют на реляционные и нереляционные. На этом уроке обсудим реляционные.
Реляционная БД — это набор таблиц и связей между ними. Если мы разрабатываем мессенджер, то нам понадобится хранить в БД сведения обо всех пользователях, чатах и сообщениях. Данные нужно чётко структурировать и свести в связанные между собой таблицы. В одной таблице будут данные о пользователях (ID, ник, ссылка на аватарку, номер телефона и город проживания), в другой — о сообщениях (номер, текст, кто, кому и когда написал сообщение, в каком чате, прочитано ли оно). Наша БД будет выглядеть так:

Для работы с реляционными БД используется SQL (Structured Query Language — структурированный язык запросов).
В сервисах Yandex Cloud представлены популярные реляционные СУБД MySQL и PostgreSQL. Эти СУБД организуют данные одинаково, но у каждой есть сильные и слабые стороны, которые могут проявляться в прикладных задачах.
MySQL
MySQL — самая популярная в мире СУБД с открытым исходным кодом.
MySQL проста. Ее синтаксис SQL не полностью соответствует последним версиям стандарта и соглашений этого языка, поскольку они усложняют написание запросов. Такой подход позволяет ускорить разработку, но ограничивает возможности тонко настраивать БД и оптимизировать запросы.
Эта СУБД входит в классический набор серверного программного обеспечения LAMP (Linux, Apache, MySQL, PHP). У LAMP есть вариации, в которых одни компоненты заменяются другими. Например, в LEMP вместо Apache используется веб-сервер NGINX.
MySQL популярна среди стартап-команд и PHP-разработчиков, широко используется в проектах разработки программного обеспечения с открытым исходным кодом.
PostgreSQL
PostgreSQL — еще одна СУБД с открытым исходным кодом, вторая по популярности после MySQL.
В отличие от MySQL, простота — точно не девиз PostgreSQL. Синтаксис её языка запросов наиболее полно соответствует последним стандартам SQL и где-то даже обгоняет их. От других СУБД PostgreSQL отличает множество настроек, продвинутая система репликации и поддержка большого числа типов данных.
Еще одно отличие от MySQL — механизм курсоров. Если MySQL отдаёт сразу все запрошенные данные, то PostgreSQL сохраняет ответы на запросы в памяти, а пользователь получает указатель (курсор) для перемещения по данным.
Всё это становится преимуществом при решении сложных задач, когда приходится оптимизировать запросы или тонко настраивать БД. Вместе с тем разнообразные настройки и сложный синтаксис языка запросов требуют более глубоких знаний и опыта.
PostgreSQL используют компании, которые работают над проектами со сложными операциями над множеством данных, избегают vendor lock-in и могут держать в штате специалиста по БД.
Реляционные БД не всегда являются лучшим инструментом, потому что:
- нестабильно работают при смешанной нагрузке, когда операции чтения и записи соотносятся примерно 1 : 1;
- плохо масштабируются;
- данные не всегда укладываются в жёсткую структуру таблицы (пример: медицинские карты пациентов поликлиники).
Из-за этого для решения многих задач используют нереляционные БД. О них мы расскажем на следующем уроке.