SQLite vs PostgreSQL vs MySQL vs NoSQL: полное сравнение баз данных в 2026 году

Выбор базы данных — одно из ключевых архитектурных решений для любого проекта. Каждая система создавалась для решения конкретных задач, и «лучшей» базы данных не существует. SQLite, PostgreSQL, MySQL и NoSQL (на примере MongoDB) — это разные инструменты с разными сильными сторонами. В этой статье разберём каждый из них детально, сравним по ключевым параметрам и дадим чёткие рекомендации по выбору.

SQLite: база данных в одном файле

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

Как работает SQLite

import sqlite3

# Подключение к файлу (создаётся автоматически)
conn = sqlite3.connect('/data/myapp.db')
cursor = conn.cursor()

# Создание таблицы
cursor.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        email TEXT UNIQUE NOT NULL,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    )
''')

# Вставка данных
cursor.execute('INSERT INTO users (name, email) VALUES (?, ?)', 
               ('Алексей', 'alex@example.com'))
conn.commit()

SQLite поддерживает большинство стандарта SQL, транзакции ACID, триггеры и представления. Это полноценная реляционная база данных — просто встроенная в приложение.

Производительность SQLite

SQLite читает данные с высокой скоростью — быстрее, чем PostgreSQL и MySQL для простых запросов, потому что нет сетевого overhead. Запись конкурентна только для чтения: SQLite блокирует всю БД при записи (WAL-режим улучшает ситуацию).

Практические ограничения:

  • Одновременная запись с нескольких процессов — проблема
  • База данных размером более 100 GB начинает тормозить
  • Нет параллельного выполнения запросов

Когда SQLite — правильный выбор

SQLite установлен на миллиардах устройств — это самая распространённая база данных в мире. Она встроена в каждый Android и iOS, в браузер Chrome и Firefox, в Python.

Используйте SQLite для:

  • Мобильных приложений (локальное хранилище)
  • Десктопных приложений
  • Прототипов и MVP на одном сервере
  • Тестирования (вместо PostgreSQL в тестах)
  • Инструментов и CLI-утилит
  • PocketBase (бэкенд-фреймворк на SQLite)
  • Маленьких сайтов и блогов

В 2026 году SQLite переживает ренессанс: Cloudflare D1, Turso, LiteFS, libSQL делают возможным distributed SQLite для edge-вычислений. Fly.io строит геораспределённые приложения на форке SQLite.

Лимит: если ваш проект вырастет до нескольких сотен тысяч активных пользователей — мигрируйте на PostgreSQL.

PostgreSQL: стандарт де-факто для продакшна

PostgreSQL — самая функциональная open-source СУБД. Активно разрабатывается с 1996 года, выходит новая версия каждый год. В 2026 году PostgreSQL занимает первое место в рейтинге DB-Engines среди реляционных open-source баз данных.

Архитектура PostgreSQL

PostgreSQL — клиент-серверная СУБД. Основной процесс (postmaster) принимает подключения, создаёт дочерние процессы для каждого клиента. Данные хранятся в табличных пространствах на диске с Write-Ahead Log (WAL) для гарантии ACID.

-- PostgreSQL поддерживает богатый SQL
-- JSON-колонки
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    attributes JSONB,
    tags TEXT[],
    price NUMERIC(10, 2),
    created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Запрос с фильтрацией по JSON
SELECT name, attributes->>'color' as color
FROM products
WHERE attributes @> '{"category": "electronics"}'
  AND price < 5000
ORDER BY created_at DESC;

-- Full-text search
SELECT * FROM products
WHERE to_tsvector('russian', name) @@ plainsearch('ноутбук');

Уникальные возможности PostgreSQL

PostgreSQL — самый богатый по возможностям open-source SQL:

  • JSONB — бинарный JSON с индексами и сложными запросами (альтернатива MongoDB для многих задач)
  • Массивы, hstore, ltree, uuid, range types
  • Полнотекстовый поиск (заменяет Elasticsearch для большинства задач)
  • Партиционирование таблиц
  • Row-Level Security (используется в Supabase)
  • Logical Replication и Streaming Replication
  • Расширения: PostGIS (геоданные), TimescaleDB (временные ряды), pgvector (векторный поиск для AI)
  • FOREIGN DATA WRAPPERS — запросы к внешним источникам (MySQL, CSV, MongoDB)

pgvector в 2025-2026 году стал критически важным расширением для AI-приложений: хранение и поиск векторных embeddings напрямую в PostgreSQL без отдельного векторного хранилища.

Производительность PostgreSQL

PostgreSQL оптимизирован для сложных запросов с JOIN, агрегациями и полнотекстовым поиском. Для простых запросов по первичному ключу MySQL немного быстрее, для аналитики — уступает ClickHouse.

Типичные показатели: десятки тысяч транзакций в секунду на современном железе. С connection pooler (pgBouncer или Supavisor) и репликацией — сотни тысяч операций чтения.

Когда выбирать PostgreSQL

PostgreSQL — выбор по умолчанию для большинства новых проектов в 2026 году. Выбирайте его для:

  • Web-приложений и API любого масштаба
  • SaaS с многопользовательским доступом
  • E-commerce (транзакции, инвентарь)
  • Финансовых систем
  • Приложений с геоданными (PostGIS)
  • AI-приложений с векторным поиском (pgvector)
  • Любого проекта, который может вырасти

MySQL: проверенный ветеран веб-разработки

MySQL — один из самых старых и распространённых серверов баз данных. Используется в WordPress, Drupal, большинстве CMS и хостинг-провайдеров. MariaDB — форк MySQL с дополнительными возможностями.

Архитектура MySQL

MySQL использует плагины хранилищ (storage engines). InnoDB — основной движок с поддержкой транзакций и ACID. MyISAM — устаревший движок без транзакций (не используйте в 2026 году).

-- MySQL: несколько особенностей синтаксиса отличаются от PostgreSQL
CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    author_id INT UNSIGNED,
    published_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_author (author_id),
    FULLTEXT INDEX ft_title_content (title, content)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Full-text search в MySQL
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST ('база данных' IN BOOLEAN MODE);

Когда MySQL имеет смысл

MySQL в 2026 году остаётся актуальным в конкретных сценариях:

  • Legacy-проекты на MySQL — нет смысла мигрировать
  • WordPress, Drupal, Laravel (традиционно используют MySQL)
  • Хостинг-провайдеры с MySQL из коробки
  • Проекты с командой, хорошо знающей MySQL
  • Репликация master-slave с высокой скоростью чтения

Для новых проектов: PostgreSQL предпочтительнее MySQL по большинству параметров — более богатые типы данных, лучший SQL-стандарт, активное развитие.

MySQL vs PostgreSQL: ключевые различия

| Параметр | MySQL | PostgreSQL | |---|---|---| | JSON поддержка | JSON (базовая) | JSONB (полноценная, с индексами) | | Полнотекстовый поиск | Базовый FULLTEXT | Богатый tsvector, ts_query | | Расширения | Ограниченно | Богатая экосистема (PostGIS, pgvector и др.) | | Синтаксис | Отличается от стандарта | Ближе к SQL-стандарту | | Скорость простых SELECT | Немного быстрее | Немного медленнее | | Аналитика | Слабее | Сильнее | | Репликация | Зрелая, mature | Полноценная, Logical + Physical | | Лицензия | GPL (Oracle) | PostgreSQL (свободная) |

NoSQL (MongoDB): документарная база данных

MongoDB — самый популярный NoSQL представитель, поэтому сравниваем именно его. (Подробнее о всех типах NoSQL — в статье «Что такое NoSQL».)

Архитектура MongoDB

MongoDB хранит данные в виде BSON-документов (бинарный JSON) в коллекциях. Схема отсутствует — документы в одной коллекции могут иметь разные поля.

// MongoDB: JavaScript-подобный API
const db = client.db('myapp');
const users = db.collection('users');

// Вставка документа
await users.insertOne({
    name: 'Алексей',
    email: 'alex@example.com',
    profile: {
        age: 28,
        city: 'Москва',
        interests: ['программирование', 'кино']
    },
    orders: [
        { orderId: 'ORD-001', total: 2500, status: 'delivered' }
    ],
    createdAt: new Date()
});

// Поиск с фильтрацией
const result = await users.find({
    'profile.city': 'Москва',
    'profile.age': { $gte: 25, $lte: 35 }
}).sort({ createdAt: -1 }).limit(10).toArray();

// Агрегационный pipeline
const stats = await users.aggregate([
    { $match: { 'profile.city': 'Москва' } },
    { $group: { _id: '$profile.age', count: { $sum: 1 } } },
    { $sort: { count: -1 } }
]).toArray();

Когда MongoDB выигрывает

MongoDB лучше PostgreSQL в конкретных сценариях:

  • Данные естественно вложенные: профиль пользователя со списком адресов, настроек и истории — в MongoDB это один документ, в PostgreSQL — 3-5 таблиц
  • Схема данных меняется часто: добавление нового поля без ALTER TABLE и миграций
  • Горизонтальное масштабирование через sharding из коробки
  • Node.js-разработка (нативная интеграция через Mongoose/native driver)

Когда MongoDB проигрывает

  • Сложные запросы с несколькими JOIN: MongoDB не поддерживает JOIN нативно, нужно использовать $lookup (медленнее и сложнее)
  • Финансовые транзакции: MongoDB ACID поддерживает с 4.0, но это сложнее и медленнее, чем PostgreSQL
  • Отчётность и аналитика: агрегационный pipeline сложнее SQL GROUP BY / WINDOW FUNCTIONS

Полная сравнительная таблица

| Параметр | SQLite | PostgreSQL | MySQL | MongoDB | |---|---|---|---|---| | Тип | Встроенная | Клиент-серверная | Клиент-серверная | Клиент-серверная | | Модель данных | Реляционная | Реляционная | Реляционная | Документарная | | Схема | Строгая | Строгая | Строгая | Гибкая | | Масштабирование | Вертикальное (один файл) | Вертикальное + репликация | Вертикальное + репликация | Горизонтальное (sharding) | | Транзакции | Полный ACID | Полный ACID | Полный ACID (InnoDB) | Частичный ACID (4.0+) | | Конкурентность | Ограниченная (WAL) | Высокая (MVCC) | Высокая | Высокая | | JSON поддержка | Базовая | Отличная (JSONB) | Базовая | Нативная | | Полнотекстовый поиск | Базовый | Хороший | Базовый | Средний | | Геоданные | Нет | PostGIS (отлично) | Базово | Средне | | Векторный поиск | Нет | pgvector | Нет | Да | | Максимальный объём | ~100 GB | Несколько TB+ | Несколько TB+ | Петабайты | | Лицензия | Public Domain | PostgreSQL (свободная) | GPL (Oracle) | SSPL (ограниченная) | | Облачные managed | Cloudflare D1, Turso | RDS, Cloud SQL, Яндекс | RDS, Cloud SQL | MongoDB Atlas | | Российские managed | — | Яндекс Cloud, VK Cloud | Яндекс Cloud | — | | Бэкап | Копирование файла | pg_dump, WAL | mysqldump | mongodump | | Идеально для | Embedded, MVP, Edge | Большинство задач | Legacy, WordPress | Гибкие схемы, документы |

Практические рекомендации по выбору

Используйте SQLite если:

  • Это мобильное или десктопное приложение
  • Один сервер, один процесс, предсказуемая нагрузка
  • Быстрый прототип или MVP
  • Используете PocketBase

Используйте PostgreSQL если:

  • Новый web-проект без чёткого требования к другой БД
  • Нужны транзакции, сложные запросы, геоданные
  • Строите AI-приложение с vector search
  • Хотите гибкость JSON при реляционной модели
  • Команда знает SQL

Используйте MySQL если:

  • Legacy-проект уже на MySQL
  • Используете WordPress, Drupal или аналогичную CMS
  • Хостинг только с MySQL

Используйте MongoDB если:

  • Данные естественно документарные и вложенные
  • Схема данных нестабильна и часто меняется
  • Команда использует Node.js и предпочитает JavaScript-экосистему
  • Нужно горизонтальное масштабирование с шардингом

Стратегия бэкапа для каждой базы данных

Выбор базы данных определяет и инструментарий создания консистентного слепка. dbsend.ru хранит и версионирует готовые файлы SQLite/DuckDB, plain SQL-дампы PostgreSQL/MySQL и произвольные файлы. Расписание создания дампа запускает cron или CI на вашей стороне.

SQLite (например, PocketBase):

# Сначала создайте консистентную копию, затем загрузите её
sqlite3 /data/database.db ".backup /tmp/database.db"
dbsend backup /tmp/database.db --database "$DBSEND_SQLITE_ID" --engine sqlite

PostgreSQL:

pg_dump --format=plain "$DATABASE_URL" > /tmp/postgres.sql
dbsend backup /tmp/postgres.sql --database "$DBSEND_POSTGRES_ID" --engine postgresql_dump

MySQL:

mysqldump --single-transaction "$MYSQL_DATABASE" > /tmp/mysql.sql
dbsend backup /tmp/mysql.sql --database "$DBSEND_MYSQL_ID" --engine mysql_dump

MongoDB:

# MongoDB пока хранится как generic_file без структурной инспекции
mongodump --uri "$MONGODB_URI" --archive=/tmp/mongodb.archive --gzip
dbsend backup /tmp/mongodb.archive --database "$DBSEND_MONGODB_ID" --engine generic_file

Один сервис хранит все версии и контролирует их поступление; консистентный файл создаёт штатная утилита каждой СУБД.


FAQ

Что лучше: SQLite или PostgreSQL для стартапа?

Для стартапа с одним сервером — SQLite (через PocketBase) работает отлично и требует нулевых DevOps-затрат. Как только появляется потребность в нескольких серверах, конкурентной записи или сложных запросах — мигрируйте на PostgreSQL. Миграция несложная: SQLite и PostgreSQL поддерживают один SQL-диалект с минимальными отличиями.

Стоит ли в 2026 году использовать MySQL для нового проекта?

Для нового проекта PostgreSQL предпочтительнее: более богатые типы данных (JSONB, массивы), лучший SQL-стандарт, активное развитие (pgvector, logical replication), свободная лицензия без корпоративных рисков (Oracle владеет MySQL). MySQL оправдан только при наличии legacy-кода или команды с глубоким MySQL-опытом.

Правда ли, что PostgreSQL медленнее MySQL?

Этот миф из 2000-х. Для простых SELECT по первичному ключу MySQL немного быстрее, но на сложных запросах, JOIN и агрегациях PostgreSQL опережает MySQL. Для большинства реальных сценариев разница в производительности незначительна — важна корректность настройки индексов и запросов.

Можно ли запустить PostgreSQL на том же сервере, что и SQLite?

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

Когда MongoDB лучше PostgreSQL с JSONB?

MongoDB лучше если: данные глубоко вложенные (3-4 уровня), структура активно меняется (agile), нужен нативный горизонтальный шардинг, команда предпочитает JavaScript. PostgreSQL с JSONB лучше если: нужны транзакции, данные частично реляционные, нужен SQL для отчётности.

Что такое ACID и почему это важно?

ACID — четыре свойства, гарантирующих надёжность транзакций: Atomicity (атомарность — транзакция выполняется полностью или откатывается), Consistency (согласованность — данные всегда в корректном состоянии), Isolation (изолированность — параллельные транзакции не мешают друг другу), Durability (долговечность — после commit данные сохранены даже при сбое). Все три SQL-базы (SQLite, PostgreSQL, MySQL/InnoDB) гарантируют ACID. MongoDB — с версии 4.0 и только при включённых транзакциях.