Урок 02

Типы 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 проще.

Сравнение

ТипМодельПримерДля чего
KVkey → valueRedisКэш, сессии
DocumentJSONMongoDBCMS, каталог
Columnrow → CFCassandraМетрики, IoT
Graphузлы + связиNeo4jСоцсети, рекомендации
Time-seriesметрикиInfluxDBМониторинг
Searchинверт. индексElasticsearchПолнотекст
VectorembeddingQdrantAI, 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: введение.