SQLite, MySQL и PostgreSQL: сравниваем популярные реляционные СУБД

Реляционные базы данных используются уже очень давно. Они стали популярными благодаря успешным реализациям реляционных моделей в системах управления, оказавшимся весьма удобными для работы с данными. В этой статье мы сравним три самые популярные реляционные системы управления базами данных (РСУБД): SQLite, MySQL и PostgreSQL.

Системы управления базами данных

Базы данных — это логически смоделированные хранилища любых типов данных. Каждая база данных, не являющаяся бессхемной, следует модели, которая задаёт определённую структуру обработки данных. СУБД — это приложения (или библиотеки), управляющие базами данных различных форм, размеров и типов.

Чтобы лучше разобраться в СУБД, ознакомьтесь с этой статьёй.

Реляционные системы управления базами данных

Реляционные системы реализуют реляционную модель работы с данными, которая определяет всю хранимую информацию как набор связанных записей и атрибутов в таблице.

СУБД такого типа используют структуры (таблицы) для хранения и работы с данными. Каждый столбец (атрибут) содержит свой тип информации. Каждая запись в базе данных, обладающая уникальным ключом, передаётся в строку таблицы, и её атрибуты отображаются в столбцах таблицы.

Отношения и типы данных

Отношения можно определить как математические множества, содержащие наборы атрибутов, отображающие хранящуюся информацию.

Каждый элемент, формирующий запись, должен удовлетворять определённому типу данных (целое число, дата и т.д.). Различные РСУБД используют разные типы данные, которые не всегда взаимозаменяемы.

Такого рода ограничения обычны для реляционных баз данных. Фактически, они и формируют суть отношений.

Популярные РСУБД

В этой статье мы расскажем о 3 наиболее популярных РСУБД:

  • SQLite: очень мощная встраиваемая РСУБД.

  • MySQL: самая популярная и часто используемая РСУБД.

  • PostgreSQL: самая продвинутая и гибкая РСУБД.

SQLite

SQLite — это изумительная библиотека, встраиваемая в приложение, которое её использует. Будучи файловой БД, она предоставляет отличный набор инструментов для более простой (в сравнении с серверными БД) обработки любых видов данных.

Когда приложение использует SQLite, их связь производится с помощью функциональных и прямых вызовов файлов, содержащих данные (например, баз данных SQLite), а не какого-то интерфейса, что повышает скорость и производительность операций.

Поддерживаемые типы данных

  • NULL: NULL-значение.

  • INTEGER: целое со знаком, хранящееся в 1, 2, 3, 4, 6, или 8 байтах.

  • REAL: число с плавающей запятой, хранящееся в 8-байтовом формате IEEE.

  • TEXT: текстовая строка с кодировкой UTF-8, UTF-16BE или UTF-16LE.

  • BLOB: тип данных, хранящийся точно в таком же виде, в каком и был получен.

Note: для получения более подробной информации ознакомьтесь с документацией.

Преимущества

  • Файловая: вся база данных хранится в одном файле, что облегчает перемещение.

  • Стандартизированная: SQLite использует SQL; некоторые функции опущены (RIGHT OUTER JOIN или FOR EACH STATEMENT), однако, есть и некоторые новые.

  • Отлично подходит для разработки и даже тестирования: во время этапа разработки большинству требуется масштабируемое решение. SQLite, со своим богатым набором функций, может предоставить более чем достаточный функционал, при этом будучи достаточно простой для работы с одним файлом и связанной сишной библиотекой.

Недостатки

  • Отсутствие пользовательского управления: продвинутые БД предоставляют пользователям возможность управлять связями в таблицах в соответствии с привилегиями, но у SQLite такой функции нет.

  • Невозможность дополнительной настройки: опять-таки, SQLite нельзя сделать более производительной, поковырявшись в настройках — так уж она устроена.

Когда стоит использовать SQLite

  • Встроенные приложения: все портируемые не предназначенные для масштабирования приложения — например, локальные однопользовательские приложения, мобильные приложения или игры.

  • Система доступа к дисковой памяти: в большинстве случаев приложения, часто производящие прямые операции чтения/записи на диск, можно перевести на SQLite для повышения производительности.

  • Тестирование: отлично подойдёт для большинства приложений, частью функционала которых является тестирование бизнес-логики.

Когда не стоит использовать SQLite

  • Многопользовательские приложения: если вы работаете над приложением, доступом к БД в котором будут одновременно пользоваться несколько человек, лучше выбрать полнофункциональную РСУБД — например, MySQL.

  • Приложения, записывающие большие объёмы данных: одним из ограничений SQLite являются операции записи. Эта РСУБД допускает единовременное исполнение лишь одной операции записи.

MySQL

MySQL — это самая популярная из всех крупных серверных БД. Разобраться в ней очень просто, да и в сети о ней можно найти большое количество информации. Хотя MySQL и не пытается полностью реализовать SQL-стандарты, она предлагает широкий функционал. Приложения общаются с базой данных через процесс-демон.

Поддерживаемые типы данных

  • TINYINT: очень маленькое целое.

  • SMALLINT: маленькое целое.

  • MEDIUMINT: целое среднего размера.

  • INT или INTEGER: целое нормального размера.

  • BIGINT: большое целое.

  • FLOAT: знаковое число с плавающей запятой одинарной точности.

  • DOUBLE, DOUBLE PRECISION, REAL: знаковое число с плавающей запятой двойной точности.

  • DECIMAL, NUMERIC: знаковое число с плавающей запятой.

  • DATE: дата.

  • DATETIME: комбинация даты и времени.

  • TIMESTAMP: отметка времени.

  • TIME: время.

  • YEAR: год в формате YY или YYYY.

  • CHAR: строка фиксированного размера, дополняемая справа пробелами до максимальной длины.

  • VARCHAR: строка переменной длины.

  • TINYBLOB, TINYTEXT: BLOB- или TEXT-столбец длиной максимум 255 (2^8 — 1) символов.

  • BLOB, TEXT: BLOB- или TEXT-столбец длиной максимум 65535 (2^16 — 1) символов.

  • MEDIUMBLOB, MEDIUMTEXT: BLOB- или TEXT-столбец длиной максимум 16777215 (2^24 — 1) символов.

  • LONGBLOB, LONGTEXT: BLOB- или TEXT-столбец длиной максимум 4294967295 (2^32 — 1) символов.

  • ENUM: перечисление.

  • SET: множества.

Преимущества

  • Простота: MySQL легко устанавливается. Существует много сторонних инструментов, включая визуальные, облегчающих начало работы с БД.

  • Много функций: MySQL поддерживает большую часть функционала SQL.

  • Безопасность: в MySQL встроено много функций безопасности.

  • Мощность и масштабируемость: MySQL может работать с действительно большими объёмами данных, и неплохо походит для масштабируемых приложений.

  • Скорость: пренебрежение некоторыми стандартами позволяет MySQL работать производительнее, местами срезая на поворотах.

Недостатки

  • Известные ограничения: по определению, MySQL не может сделать всё, что угодно, и в ней присутствуют определённые ограничения функциональности.

  • Вопросы надёжности: некоторые операции реализованы менее надёжно, чем в других РСУБД.

  • Застой в разработке: хотя MySQL и является open-source продуктом, работа над ней сильно заторможена. Тем не менее, существует несколько БД, полностью основанных на MySQL (например, MariaDB). Кстати, подробнее о родстве MariaDB и MySQL можно из нашего интервью с создателем обеих РСУБД — Джеймсом Боттомли.

Когда стоит использовать MySQL

  • Распределённые операции: когда вам нужен функционал бо́льший, чем может предоставить SQLite, стоит использовать MySQL.

  • Высокая безопасность: функции безопасности MySQL предоставляют надёжную защиту доступа и использования данных.

  • Веб-сайты и приложения: большая часть веб-ресурсов вполне может работать с MySQL, несмотря на ограничения. Этот инструмент весьма гибок и прост в обращении, что только на руку в длительной перспективе.

  • Кастомные решения: если вы работаете над очень специфичным продуктом, MySQL подстроится под ваши потребности благодаря широкому спектру настроек и режимов работы.

Когда не стоит использовать MySQL

  • SQL-совместимость: поскольку MySQL не пытается полностью реализовать стандарты SQL, она не является полностью совместимой с SQL. Из-за этого могут возникнуть проблемы при интеграции с другими РСУБД.

  • Конкурентность: хотя MySQL неплохо справляется с операциями чтения, одновременные операции чтения-записи могут вызвать проблемы.

  • Недостаток функций: в зависимости от выбора движка MySQL может недоставать некоторых функций.

PostgreSQL

PostgreSQL — это самая продвинутая РСУБД, ориентирующаяся в первую очередь на полное соответствие стандартам и расширяемость. PostgreSQL, или Postgres, пытается полностью соответствовать SQL-стандартам ANSI/ISO.

PostgreSQL отличается от других РСУБД тем, что обладает объектно-ориентированным функционалом, в том числе полной поддержкой концепта ACID (Atomicity, Consistency, Isolation, Durability).

Будучи основанным на мощной технологии Postgres отлично справляется с одновременной обработкой нескольких заданий. Поддержка конкурентности реализована с использованием MVCC (Multiversion Concurrency Control), что также обеспечивает совместимость с ACID.

Хотя эта РСУБД не так популярна, как MySQL, существует много сторонних инструментов и библиотек для облегчения работы с PostgreSQL.

Поддерживаемые типы данных

  • bigint: знаковое 8-байтное целое.

  • bigserial: автоматически инкрементируемое 8-битное целое.

  • bit [(n)]: битовая строка фиксированной длины.

  • bit varying [(n)]: битовая строка переменной длины.

  • boolean: булевская величина.

  • box: прямоугольник на плоскости.

  • bytea: бинарные данные.

  • character varying [(n)]: строка символов фиксированной длины.

  • character [(n)]: строка символов переменной длины.

  • cidr: сетевой адрес IPv4 или IPv6.

  • circle: круг на плоскости.

  • date: календарная дата.

  • double precision: число с плавающей запятой двойной точности.

  • inet: адрес хоста IPv4 или IPv6.

  • integer: знаковое 4-байтное целое.

  • interval [fields] [(p)]: временной промежуток.

  • line: бесконечная прямая на плоскости.

  • lseg: отрезок на плоскости.

  • macaddr: MAC-адрес.

  • money: денежная величина.

  • path: геометрический путь на плоскости.

  • point: геометрическая точка на плоскости.

  • polygon: многоугольник на плоскости.

  • real: число с плавающей запятой одинарной точности.

  • smallint: знаковое 2-байтное целое.

  • serial: автоматически инкрементируемое 4-битное целое.

  • text: строка символов переменной длины.

  • time [(p)] [without time zone]: время суток (без часового пояса).

  • time [(p)] with time zone: время суток (с часовым поясом).

  • timestamp [(p)] [without time zone]: дата и время (без часового пояса).

  • timestamp [(p)] with time zone: дата и время (с часовым поясом).

  • tsquery: запрос текстового поиска.

  • tsvector: документ текстового поиска.

  • txid_snapshot: снэпшот ID пользовательской транзакции.

  • uuid: уникальный идентификатор.

  • xml: XML-данные.

Преимущества

  • Полная SQL-совместимость.

  • Сообщество: PostgreSQL поддерживается опытным сообществом 24/7.

  • Поддержка сторонними организациями: несмотря на очень продвинутые функции, PostgreSQL используется в многих инструментах, связанных с РСУБД.

  • Расширяемость: PostgreSQL можно программно расширить за счёт хранимых процедур.

  • Объектно-ориентированность: PostgreSQL — не только реляционная, но и объектно-ориентированная СУБД.

Недостатки

  • Производительность: В простых операциях чтения PostgreSQL может уступать своим соперникам.

  • Популярность: из-за своей сложности инструмент не очень популярен.

  • Хостинг: из-за вышеперечисленных факторов проблематично найти подходящего провайдера.

Когда стоит использовать PostgreSQL

  • Целостность данных: если приоритет стоит на надёжность и целостность данных, PostgreSQL — лучший выбор.

  • Сложные процедуры: если ваша БД должна выполнять сложные процедуры, стоит выбрать PostgreSQL в силу её расширяемости.

  • Интеграция: если в будущем вам предстоит перемещать всю базу на другое решение, меньше всего проблем возникнет с PostgreSQL.

Когда не стоит использовать PostgreSQL

  • Скорость: если всё, что нужно — это быстрые операции чтения, не стоит использовать PostgreSQL.

  • Простые ситуации: если вам не требуется повышенная надёжность, поддержка ACID и всё такое, использование PostgreSQL — это стрельба из пушки по мухам.

Перевод статьи https://www.digitalocean.com/community/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems

Last updated