Урок 01

Что такое NoSQL и зачем

Определение

NoSQL (Not Only SQL) — класс СУБД, отличающихся от классических реляционных:

  • Не требуют фиксированной схемы.
  • Горизонтально масштабируются из коробки.
  • Отказываются от ACID в пользу BASE.
  • Оптимизированы под конкретную задачу (документы, граф, ключ-значение).

Это не «замена SQL». Это другие инструменты для других задач.

Зачем появились

Проблемы SQL в 2000-х:

  • Вертикальное масштабирование — только мощнее сервер.
  • Строгая схема — трудно менять.
  • JOIN на миллиардах строк — медленно.
  • ACID тормозит на распределённых системах.

Google, Amazon, Facebook — начали делать свои:

  • Bigtable → HBase, Cassandra.
  • Dynamo → DynamoDB, Riak.
  • MongoDB — документная.
  • Neo4j — графовая.

CAP-теорема

Brewer, 2000. Распределённая система может гарантировать только 2 из 3:

  • C — Consistency. Все узлы видят одинаковые данные.
  • A — Availability. Каждый запрос получает ответ.
  • P — Partition tolerance. Система работает при потере связи между узлами.

На практике: P обязателен. Выбор — между C и A.

CA-системы: PostgreSQL, MySQL (без распределения). CP: MongoDB, HBase (жертвует доступностью). AP: Cassandra, DynamoDB, Riak (жертвует согласованностью).

Правило: с распределённой системой выбираешь CP или AP.

ACID vs BASE

ACID (реляционные):

  • Atomicity — всё или ничего.
  • Consistency — валидные состояния.
  • Isolation — транзакции не видят друг друга.
  • Durability — после commit — надёжно.

BASE (NoSQL):

  • Basically Available — доступность.
  • Soft state — состояние может меняться.
  • Eventually consistent — со временем данные сойдутся.

Что даёт: масштабируемость за счёт строгости.

Виды NoSQL

4 основных типа:

1. Key-Value:

  • Redis, Memcached, DynamoDB.
  • Просто: ключ → значение.
  • Быстро, максимально просто.

2. Document:

  • MongoDB, CouchDB, Firebase.
  • JSON-документы.
  • Гибкая схема, вложенность.

3. Column-family:

  • Cassandra, HBase, ScyllaDB.
  • Колонки → строчные группы.
  • Для временных рядов и метрик.

4. Graph:

  • Neo4j, ArangoDB, JanusGraph.
  • Узлы и связи.
  • Для соцсетей, рекомендаций, маршрутов.

Плюс:

  • Time-series — InfluxDB, TimescaleDB.
  • Search — Elasticsearch, Meilisearch.
  • Vector — Pinecone, Qdrant, Milvus.
  • Wide-column — ScyllaDB.

Когда NoSQL

Document (MongoDB):

  • Гибкая схема, частые изменения.
  • Вложенные данные (заказ + позиции).
  • CMS, каталоги, профили.
  • Быстрый старт разработки.

Key-Value (Redis):

  • Кэш.
  • Сессии.
  • Очереди.
  • Счётчики.
  • Rate limiting.

Column (Cassandra):

  • Метрики, логи.
  • IoT-данные.
  • Time-series.
  • Огромные объёмы.
  • Multi-datacenter.

Graph (Neo4j):

  • Соцсети.
  • Рекомендательные системы.
  • Графы знаний.
  • Маршруты.

Search (Elasticsearch):

  • Полнотекстовый поиск.
  • Логи.
  • Аналитика по тексту.

Когда НЕ NoSQL

  • Финансы, транзакции — ACID обязателен.
  • Сложные связи — граф или SQL.
  • Аналитика — DWH.
  • Нормализация — реляционная.
  • Маленькие объёмы — PostgreSQL справится.

Правило: PostgreSQL по умолчанию. NoSQL — если есть конкретная причина.

Polyglot Persistence

Идея: разные данные — в разных БД.

Пример интернет-магазина:

  • PostgreSQL — заказы, платежи (ACID).
  • MongoDB — каталог, характеристики (гибкая схема).
  • Redis — кэш, сессии.
  • Elasticsearch — поиск.
  • Neo4j — рекомендации.
  • ClickHouse — аналитика.

Что даёт: каждая БД для своей задачи.

Что стоит: сложнее инфраструктура, синхронизация.

Правило: начинай с одной БД. Добавляй по мере необходимости.

Ошибки перехода на NoSQL

1. «SQL не масштабируется»:

PostgreSQL масштабируется через партиции, реплики, шардирование

2. «Схема не нужна»:

Схема есть, но в приложении — хуже, чем в БД

3. «NoSQL быстрее»:

На простых запросах — да. На сложных — часто медленнее

4. «ACID не нужен»:

Приложение ждёт ACID и ломается без него

5. «Один NoSQL для всего»:

Каждая БД оптимизирована под своё

Практика

1. Определите, где в вашем проекте нужен NoSQL.

2. Оцените CAP: вам нужна C или A?

3. Выберите тип: document, KV, column, graph?

4. Не мигрируйте всё разом — начните с одной задачи.

Итог

  • NoSQL ≠ замена SQL.
  • CAP: выбор между C и A.
  • BASE vs ACID.
  • 4 типа: KV, document, column, graph.
  • Polyglot persistence — разные БД для разных задач.
  • PostgreSQL по умолчанию.
  • NoSQL — когда есть конкретная причина.

Дальше — типы NoSQL баз.