NoSQL базы

NoSQL (Not Only SQL) — это общее понятие для всех нереляционных баз. Когда мы говорим «NoSQL», мы не имеем в виду какую-то одну конкретную архитектуру. Мы подразумеваем целое семейство баз данных, каждая из которых решает свою узкую проблему лучше, чем классический Postgres.

1. Key-Value (Ключ-Значение)

Самый простой тип баз данных. Работает как огромный словарь (HashMap) — у тебя есть уникальный ключ, и по нему лежит какой-то кусок данных (строка, число или JSON-объект).

  • Примеры: Valkey, Memcached, Amazon DynamoDB.
  • Особенности: Феноменальная скорость (сложность O(1)), часто хранят данные прямо в оперативной памяти (In-Memory). Не умеют делать сложные запросы (нельзя сказать "найди всех, у кого возраст > 20").
  • Сценарии использования: Кэширование, хранение сессий пользователей, токены, счетчики лайков/просмотров в реальном времени.
2. Document-oriented (Документные)

Развитие идеи Key-Value. Здесь значением всегда выступает структурированный документ, чаще всего в формате JSON. База «понимает» структуру этого JSON'а, может строить индексы по вложенным полям и делать по ним поиск.

  • Примеры: MongoDB, Couchbase, Firestore.
  • Особенности: Schema-less (нет жесткой схемы). В одной коллекции у одного документа может быть поле age, а у соседнего — нет. Отлично маппится на объекты в коде приложения (ООП).
  • Сценарии использования: Каталоги интернет-магазинов, CMS-системы, профили пользователей с динамическим набором полей.

Давай сравним: Key-Value против Document DB

Key-Value (например, Redis) Документная БД (например, MongoDB)
Для СУБД значение — это Обычная строка/blob (черный ящик) Структурированный документ (JSON/BSON)
Можно ли сделать индекс по user.age? Нет (база не знает, что внутри) Да, отдельным индексом
Запросы: price > 100 Невозможно без выгрузки всех ключей Обычная фильтрация, работает быстро
3. Wide-column / Column-Family

Не путай с Column-oriented базами для аналитики (о них в следующем уроке)! Здесь данные организованы в «семейства колонок». Архитектура таких баз создана для того, чтобы горизонтально масштабироваться на сотни серверов без единой точки отказа (Masterless).

  • Примеры: Cassandra, HBase, ScyllaDB.
  • Особенности: Оптимизированы для невероятно быстрых записей (write-heavy). Чтение может быть чуть медленнее. Работают по принципу Eventual Consistency.
  • Сценарии использования: Ленты новостей, логирование, IoT-данные от миллионов датчиков.
4. Graph (Графовые)

В реляционных базах делать многоуровневые JOIN'ы (найти друзей моих друзей, которые купили такой же товар) — это очень дорого и долго. В графовых базах связи (рёбра) являются «гражданами первого класса».

  • Примеры: Neo4j, JanusGraph, Amazon Neptune.
  • Особенности: Модель данных состоит из узлов (сущности) и связей (действия). Поиск кратчайшего пути или обход графа занимает миллисекунды.
  • Сценарии использования: Социальные сети (граф друзей), рекомендательные системы, поиск подозрительных цепочек транзакций.