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.
- Особенности: Модель данных состоит из узлов (сущности) и связей (действия). Поиск кратчайшего пути или обход графа занимает миллисекунды.
- Сценарии использования: Социальные сети (граф друзей), рекомендательные системы, поиск подозрительных цепочек транзакций.