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();