Статья основана на первом видео из 30 тем курса SQL c 0 от Аристова Евгения. Ссылки на видео на платформах RUTUBE и VK видео.
В данной статье разбирается история возникновения языка SQL, причины использования PostgreSQL для обучения на данном курсе и его краткая история.
Реляционная модель
Откуда все началось? А началось всё в 1970 году с реляционной модели, которую создал Эдгар Франк Кодд в 1970-х годах в рамках программы исследований IBM. Именно он придумал NULL, view, select, нормализацию и т.д.
Что такое вообще Relation? Откуда пошло слово Реляционная?
В реляционной базе данные представляют из себя набор атрибутов(столбцов), каждый из которых имеет свой тип. Существуют строки/tuples (кортежи – в более ранней документации).
Грубо говоря, Relation — это таблица в Excel (один лист). Каждая строчка содержит весь набор атрибутов, который описан, но значение может быть, например, пустым (”) или NULL. Однако у каждой строчки все эти атрибуты должны присутствовать, в отличие от MongoDB, где каждая строчка может быть уникальной и может содержать различный набор атрибутов.
Основа реляционной базы данных – декларативный способ представления. Противоположность этому – императивный вид хранения (как, например, в языке С – обращение идет к конкретной ячейке памяти, прямая работа с регистрами). В нашем случае СУБД – черная коробка, которая сама выбирает как хранить данные, мы только декларируем, что хотим получить или записать.
Идея в том, что пользователь пишет запросы на понятном ему языке. То есть, используя нативный английский, можно самостоятельно выбирать поля из любой таблицы по необходимым условиям select (выбери) поле1 from (из) таблица1 where (где) условие. СУБД обрабатывает запросы и предоставляет результат (мы, как архитекторы, естественно можем на это влиять). Своеобразным аналогом на русском является 1С.
Идея заключалась в том, что на своем родном языке банковские и другие аналитики могли общаться с базой данных и сохранять и получать результаты в нативном виде. Но человек оказался слишком ленив для изучения строго типизированного языка и теперь на этом языке с машиной “разговаривают” лишь специально обученные люди.
Также в реляционной модели присутствует понятие нормальных форм. Они позволяют разбивать предметную область на таблицы, которые хранят отдельные кусочки информации.
Нормализация – разделение данных на минимальные сущности. Принято считать, что она приводит к увеличению производительности, но это не всегда так. Разберем в 2 теме, которая также будет выложена в публичный доступ как в виде записи на YouTube, так и в виде статьи в моём блоге.
Обратный процесс – денормализация данных (преобразование большого количества маленьких объектов в один большой).
Для обратного объединения таблиц используются первичные и внешние ключи (разберём в 3 теме), которые объединяются через SQL команду JOIN (разберём в 20 теме). Это не бесплатный процесс в плане производительности, но хранение данных по отдельности (нормальными формами) позволяет минимизировать избыточность. Позже мы рассмотрим, чем нормализация вредна для аналитических баз данных.
SQL и PostgreSQL
На основании теоретической модели реляционной базы данных был построен SQL (разберём в 5 теме). Последний его стандарт вышел недавно – в 2023 году. До этого использовался SQL 2016.
Все команды языка описаны в стандарте. В целом, они подходят для любой СУБД с незначительными отличиями.
Конечно, для того чтобы база данных, как черная коробка, нам отвечала на запросы, нужно выбать ту или иную систему управления базами данных (СУБД).
В последние 5–6 лет PostgreSQL набирает всё большую популярность, что видно из отчётов за 2022 и 2023 года. Из бесплатных СУБД он сравним по количеству установок только с MySQL.
В этом можно убедиться, например, воспользуясь статистикой известного сайта statisticsanddata.org.
Видим всё ускоряющуюся динамику развития популярности PostgreSQL.
Популярность MySQL объясняется огромным количеством интернет сайтов, где в основном он и используется за счет своей простоты в виде LAMP стека.
В продакшене PostgreSQL на порядок более популярен. В крупных компаниях до сих пор часто используется MySQL, но новые проекты на нем уже не пишутся. Причина в том, что MySQL был куплен компанией Oracle, после чего практически перестал обновляться. Последней версии уже около 5 лет, продукт не развивается (кроме устранения некоторых проблем с безопасностью). PostgreSQL имеет чуть больший порог вхождения.
Ранее был создан MySQL X, как аналог Mongo, который позволяет не использовать схемы. Ещё раз отмечу, что отличие RDBMS (Relational DataBase Management System) решения от NoSQL в четком описании реквизитов строк в таблице. А Mongo, например, может хранить любые наборы строк в коллекции. С этого языка сейчас тоже в основном переходят на PostgreSQL, так как на больших проектах встречаются большие проблемы с производительностью. В данный момент Mongo официально не представлен на территории России. У PostgreSQL, напротив, есть контрибьютер в России — это компания Postgres Pro, которая предоставляет платную поддержку продуктов и лицензии.
История PostgreSQL
PostgreSQL был создан в 1970-х, назывался INGRES (INteractive Grafic REtrieval System) и был NoSQL решением. После долгого развития в 1995 году в него добавили SQL. И в 1996 году появился официальный сайт продукта https://www.postgresql.org/
На данный момент PostgreSQL не имеет единого владельца, а развивается концорциумом компаний, в их числе EnterpriseDB, Crunchy Data, Postgres Professional. Также зарегистрировано около 2900 контрибьютеров (учатников проекта). Большинство из них — это простые люди, которые вносят правки в исходный код.
Самая актуальная на данный момент версия PostgreSQL – 16.2. 17-ая версия PostgreSQL выйдет в октябре, но уже сейчас тестируется 18-ая. То есть вносятся правки, потом они проходят различные тесты безопасности, что-то исключается из версии. Каждую версию добавляется что-то новое. В основном, каждая следующая версия оказывается быстрее предыдущей. Переход с 12-ой на 14-ую в некоторых случаях может увеличить скорость в два раза, например при работе с JSONB. Улучшается безопасность, так до 14-ой версии пользователь мог создавать объекты в схеме public, это убрали. Помимо улучшения новых версий, выходят обновления и старых версий.
PostgreSQL предназначен в основном для OLTP (Online Transaction Processing) нагрузки, то есть большое количество небольших запросов, возвращающих небольшое количество строк. Классический вариант использования – онлайн магазины, банковские системы, каталоги и т. д. Для аналитических процессов PostgreSQL подходит довольно посредственно. Для OLAP (Online Analytical Processing) – нагрузки должны использоваться предварительные расчёты и другие инструменты. Например, ClickHouse как реплика PostgreSQL, Greenplum как распределённая OLAP система на базе PostgreSQL. Недавно был представлен Shardman на базе PostgreSQL от компании Postgres Pro.
Плюсы PostgreSQL
- Поддержка стандарта SQL
- Поддержка большого количества типов данных
- Открытый исходный код
- Поддержка сложных запросов, объединение таблиц
- Наличие бесплатных версий (платные версии имеют разные фишки, но можно пользоваться без них)
- Высокая мощность и широкая функциональность
- Кроссплатформенность
- Написание функций на разных языках (с помощью установления расширений)
- Поддержка ACID (транзакции – атомарность, согласованность, изолированность, надежность)
- Возможность включать и выключать расширения (extension). Таким образом можно сделать из PostgreSQL, например, redis.
- Одновременный доступ с сотен устройств
Минусы PostgreSQL
- Сложная внутренняя архитектура, которая требует понимания – высокий порог вхождения
- Проблемы с онлайн обновлениями на новую версию
- Сложная система настройки
- Нет бесплатных кластеров
- Низкая производительность на сложных запросах
Последняя актуальная версия PostgreSQL 16.2. В документации содержится описание основных функций на 3100 страниц. В 15 версии было всего 2700. Это говорит о значительных изменениях.
Об отличиях в версиях PostgreSQL можно прочитать здесь.
Презентация к статье здесь.
Вторая из 30 тем будет скоро доступна. Если вы хотите быстрее получить доступ – присоединяйтесь к онлайн группе, ссылка доступна в описании курса.
Добавить комментарий