163 слов | 1 минута
Сравнение СУБД: MariaDB, PostgreSQL, MongoDB
Краткий обзор трёх популярных систем управления базами данных с ключевыми особенностями каждой.
MariaDB
Fork кодовой базы MySQL с оптимизациями производительности и расширенными возможностями. Полностью совместима с существующими MySQL-приложениями.
Ключевые возможности:
- Структурированные типы данных
- Различные типы таблиц (InnoDB, Aria, MyISAM)
- GUI: MySQL Workbench
- Каждое соединение — отдельный поток
- Транзакции через InnoDB
- Обобщённые табличные выражения (CTE)
- Оконные функции
- Полнотекстовый поиск
- Логическая и полусинхронная репликация
- GIS и SRS
- ODBC / JDBC
PostgreSQL
Объектно-реляционная СУБД с расширенным соответствием стандарту ANSI SQL. Поддерживает как структурированные, так и неструктурированные типы данных.
Ключевые возможности:
- Структурированные, неструктурированные и перечисляемые типы данных
- GUI: pgAdmin
- Каждое соединение — отдельный процесс
- Вложенные SELECT-запросы
- Транзакции
- Внешние ключи
- Представления (Views)
- Хранимые процедуры
- Триггеры
- Полные JOIN-ы
- Ограничители целостности
- Вакуум (VACUUM) — очистка устаревших данных
- CTE, оконные функции, полнотекстовый поиск, репликация
- GIS и SRS
- ODBC / JDBC
MongoDB
Документно-ориентированная NoSQL СУБД. Данные хранятся в формате JSON-подобных документов (BSON). Работа строится через схемы и модели (при использовании Mongoose).
Базовый шаблон работы через Mongoose:
// Определение схемы → создание модели
const PersonSchema = new mongoose.Schema({ name: String, age: Number });
const Person = mongoose.model('Person', PersonSchema);
// Создание документа
const person = new Person({ name: 'Иван', age: 30 });
// Сохранение (возвращает Promise)
person.save().then().catch();
// Поиск
Person.find({ age: 24 }).then();
// Поиск по нескольким значениям
Person.find({ name: { $in: ['Иван', 'Пётр'] } }).then();
// Сортировка
Person.find().sort('age'); // по возрастанию
Person.find().sort('-age'); // по убыванию
// Лимитирование
Person.find().limit(10);
// Удаление
Person.find().deleteMany();