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