Типы NoSQL баз
Обзор
4 основных типа + специфичные:
- Key-Value — ключ → значение.
- Document — JSON-документы.
- Column-family — колонки и строчные группы.
- Graph — узлы и связи.
- Time-series — временные ряды.
- Search — полнотекстовый поиск.
- Vector — вектора (AI).
Каждый для своей задачи.
Key-Value
Модель:
key → value
'user:5:name' → 'Алиса'
'session:abc' → '{"userId": 5}'
Что даёт:
- Максимальная скорость.
- Простота.
- Легко шардируется.
Что нет:
- Запросы по значению.
- Сложные структуры.
- JOIN.
- Транзакции (обычно).
Примеры:
- Redis — in-memory, со структурами (list, hash, set).
- Memcached — чистый KV, только в RAM.
- DynamoDB — managed AWS.
- etcd, Consul — service discovery.
Когда:
- Кэш.
- Сессии.
- Конфиги.
- Rate limiting.
- Очереди.
Document
Модель:
{
"_id": "507f1f77bcf86cd799439011",
"email": "a@b.com",
"name": "Алиса",
"orders": [
{ "id": 1, "total": 100 },
{ "id": 2, "total": 200 }
],
"metadata": { "theme": "dark" }
}
Что даёт:
- Вложенность — заказ с позициями в одном документе.
- Гибкая схема.
- Запросы по полям, массивам, вложенным документам.
- Индексы.
Что нет:
- JOIN (есть
$lookup, но не как SQL). - Транзакции — в MongoDB 4.0+, но дорогие.
- Нормализация — не цель.
Примеры:
- MongoDB — самый популярный.
- CouchDB — с MVCC.
- Firebase Firestore — managed Google.
- Amazon DocumentDB — managed AWS.
- RavenDB — .NET.
Когда:
- Гибкая схема.
- Вложенные данные.
- Быстрый старт.
- CMS, каталоги, профили.
Column-family (Wide-column)
Модель:
row_key → { column_family_1, column_family_2, ... }
user:5 → {
profile: { name: 'Алиса', email: 'a@b.com' },
activity: { last_login: '2026-10-15', posts: 42 }
}
Что даёт:
- Огромные объёмы (петабайты).
- Multi-datacenter из коробки.
- Высокая доступность.
- Быстрая запись.
Что нет:
- Сложные запросы.
- JOIN.
- ACID (обычно).
- Гибкая схема на уровне колонок.
Примеры:
- Cassandra — Apache.
- ScyllaDB — C++ реинжиниринг Cassandra.
- HBase — на Hadoop.
- Google Bigtable.
Когда:
- Метрики, логи.
- IoT.
- Time-series.
- Огромные объёмы на запись.
Graph
Модель:
(Алиса) —[дружит]→ (Боб)
(Боб) —[купил]→ (iPhone)
(Алиса) —[купила]→ (iPhone)
Что даёт:
- Естественное хранение связей.
- Быстрые обходы графа.
- Гибкая схема узлов и связей.
- Мощный язык запросов (Cypher).
Что нет:
- Огромные объёмы (обычно).
- Простые KV-задачи.
Примеры:
- Neo4j — самый популярный.
- ArangoDB — multi-model.
- JanusGraph — на Cassandra/HBase.
- Amazon Neptune — managed.
Когда:
- Соцсети.
- Рекомендации.
- Графы знаний.
- Fraud detection.
- Маршруты.
Time-series
Модель:
metric_name, timestamp, tags, value
temperature, 2026-10-15T10:00, {city: 'MSK'}, 22.5
Что даёт:
- Оптимизация под временные данные.
- Сжатие.
- Retention из коробки.
- Агрегации по окнам.
Примеры:
- InfluxDB — самый популярный.
- TimescaleDB — расширение PostgreSQL.
- Prometheus — для метрик.
- VictoriaMetrics — быстрый.
Когда:
- Метрики серверов.
- IoT-датчики.
- Финансовые тики.
- Логи.
Search
Модель:
- Инвертированный индекс — слово → документы.
- Анализаторы — токенизация, стемминг.
- Релевантность — score.
Примеры:
- Elasticsearch — стандарт.
- OpenSearch — форк от AWS.
- Meilisearch — простой, быстрый.
- Typesense — быстрый, простой.
- Algolia — managed.
Когда:
- Полнотекстовый поиск.
- Логи (ELK stack).
- Аналитика по тексту.
- Автодополнение.
Vector
Модель:
id: 5
embedding: [0.1, -0.2, 0.3, ...] # 1536 чисел
metadata: { source: 'doc.pdf', page: 3 }
Что даёт:
- Поиск по семантической близости.
- Для AI / RAG.
- ANN-индексы (HNSW, IVF).
Примеры:
- Pinecone — managed.
- Qdrant — self-hosted.
- Milvus — масштабируемый.
- Weaviate — со схемой.
- pgvector — расширение PostgreSQL.
Когда:
- RAG для LLM.
- Semantic search.
- Рекомендации.
- Кластеризация.
Multi-model
Одна БД — несколько моделей:
- ArangoDB — document + graph + KV.
- Redis — KV + document (JSON) + time-series + streams.
- PostgreSQL — relational + JSONB + vector + full-text.
- Couchbase — document + KV + search.
Что даёт: одна инфраструктура для нескольких задач.
Правило: специализированные БД лучше, но multi-model проще.
Сравнение
| Тип | Модель | Пример | Для чего |
|---|---|---|---|
| KV | key → value | Redis | Кэш, сессии |
| Document | JSON | MongoDB | CMS, каталог |
| Column | row → CF | Cassandra | Метрики, IoT |
| Graph | узлы + связи | Neo4j | Соцсети, рекомендации |
| Time-series | метрики | InfluxDB | Мониторинг |
| Search | инверт. индекс | Elasticsearch | Полнотекст |
| Vector | embedding | Qdrant | AI, RAG |
Как выбрать
По задаче:
- Кэш → Redis.
- Гибкий документ → MongoDB.
- Метрики → Prometheus / InfluxDB.
- Граф → Neo4j.
- Поиск → Elasticsearch / Meilisearch.
- AI → pgvector / Qdrant / Pinecone.
- Огромные объёмы записи → Cassandra / ScyllaDB.
По опыту команды:
- Знают PostgreSQL → pgvector, JSONB, full-text сначала.
- Знают MongoDB → она и для документов, и для KV (ограниченно).
Правило: не плодить БД без причины.
Частые ошибки
1. Один тип для всего:
MongoDB для финансов
Решение: каждая задача — своя БД.
2. MongoDB как SQL:
Нормализация, JOIN-ы через lookup
Решение: документная модель — вложенные данные.
3. Cassandra для сложных запросов:
Гибкость запросов ограничена
Решение: проектировать под запросы заранее.
4. Elasticsearch как primary:
Не ACID, потеря данных
Решение: только вторичная БД.
5. Redis как БД:
In-memory, ограничен размер RAM
Решение: персистентность + понимание, что при OOM — потеря.
6. Vector вместо search:
Точный поиск по слову не работает
Решение: hybrid (vector + search).
7. Забыли про CAP:
Ждём ACID от AP-системы
Решение: понимать trade-offs.
Практика
1. Для каждой задачи в вашем проекте выберите подходящий тип БД.
2. Попробуйте MongoDB для документной задачи.
3. Попробуйте Redis для кэша.
4. Попробуйте Neo4j для графа (даже маленького).
5. Настройте Elasticsearch / Meilisearch для поиска.
6. Используйте pgvector для vector-search, если уже есть PostgreSQL.
Итог
- 7 типов: KV, document, column, graph, time-series, search, vector.
- Каждый для своей задачи.
- Multi-model — компромисс.
- Polyglot persistence — разные БД.
- Начинать с одной БД.
- Не плодить без причины.
Дальше — MongoDB: введение.