System Design Space

    Глава 105

    Обновлено: 15 февраля 2026 г. в 19:50

    Database Selection Framework

    Прогресс части0/12

    Практический фреймворк выбора СУБД под задачу: OLTP vs OLAP, read/write профиль, консистентность, репликация, шардирование и операционные риски.

    Фундамент

    Database Internals

    Разбор внутренних механизмов СУБД помогает принимать осмысленные архитектурные решения.

    Открыть главу

    Database Selection Framework - это практический способ выбрать СУБД под конкретный продукт и его ограничения, а не по вкусу команды. Цель главы: структурно пройти выбор между OLTP и OLAP, зафиксировать read/write профиль, требования к консистентности, а затем принять решения по репликации и шардированию с учетом операционной сложности.

    OLTP vs OLAP

    OLTP

    Много коротких транзакций, high concurrency, строгие требования к latency и корректности записи.

    • p95/p99 latency критичны для пользовательских операций.
    • Нужны ACID-гарантии и предсказуемая transactional semantics.
    • Частые point reads/writes, работа по ключу.

    PostgreSQL / MySQL / распределенный SQL в зависимости от масштаба и требований к консистентности.

    OLAP

    Тяжелые аналитические запросы, агрегации по большим диапазонам, columnar scan и экономия на чтении.

    • Основная нагрузка - read-heavy аналитика и отчеты.
    • Нужны материализованные витрины и массовые batch/stream ingest.
    • Компромисс на write path ради быстрого анализа.

    ClickHouse / DWH/Lakehouse-подход с columnar engine.

    Decision Framework (5 осей)

    1. Read/Write профиль

    Оцените R/W ratio, размер операций, burst pattern, требуемые SLA по latency.

    • Сколько writes/sec и reads/sec ожидается на старте и через год?
    • Какой объем данных в hot-set и каков характер ключей доступа?
    • Есть ли всплески трафика и как часто нужны backfill/массовые загрузки?

    2. Консистентность и транзакции

    Решите, где нужен strict consistency, а где достаточно eventual consistency.

    • Допустимы ли stale reads и в каких user-flow это безопасно?
    • Требуются ли multi-row/multi-entity транзакции?
    • Какой уровень read/write concern требуется бизнесу?

    3. Репликация

    Определите цель репликации: HA, геораспределение, read scaling, disaster recovery.

    • Нужен ли sync replication для критичных данных?
    • Какие RPO/RTO целевые метрики для аварийного восстановления?
    • Какой lag на async-репликах приемлем для продукта?

    4. Шардирование

    Проверяйте необходимость shard strategy только когда vertical scaling уже не решает задачу.

    • Какой shard key минимизирует hotspot и cross-shard queries?
    • Насколько болезненны re-sharding и миграции ключей?
    • Какие операции станут распределенными транзакциями?

    5. Операционная сложность

    Сравните не только техническую пригодность, но и стоимость владения: команды, tooling, runbooks.

    • Есть ли экспертиза в команде по выбранной СУБД?
    • Как устроены backup/restore, observability, on-call практики?
    • Сколько стоит кластер при целевом объеме и SLA?

    Быстрая матрица выбора

    Транзакционный backend (заказы, платежи, аккаунты)

    OLTP-first

    Строгая консистентность, транзакции и low-latency writes/reads.

    Продуктовая аналитика, BI и ad-hoc запросы

    OLAP-first

    Большие сканы и агрегации эффективнее в columnar хранилищах.

    Mixed workload (операции + аналитика)

    Polyglot persistence

    Отделите OLTP write-path от OLAP serving через CDC/ETL/ELT pipeline.

    Глобальный масштаб с региональными SLA

    Replication + selective sharding

    Комбинация read locality, HA и контролируемой стоимости операций.

    Практика

    Репликация и шардинг

    Практические модели и визуализации: primary-replica, multi-leader, shard key и rebalance.

    Открыть главу

    Репликация и шардирование: минимальные правила

    Replication

    • Определите sync/async стратегию по критичности данных.
    • Измеряйте replication lag и влияние на read consistency.
    • Проверяйте failover не на бумаге, а регулярными game day.

    Sharding

    • Выбирайте shard key под реальные query patterns, а не под абстракцию.
    • Оценивайте cross-shard joins и distributed transaction cost.
    • Закладывайте миграционный путь для re-sharding заранее.

    Частые ошибки выбора СУБД

    Выбирать базу только по хайпу, без workload-профиля и SLA.

    Преждевременное шардирование до исчерпания vertical scaling и индексов.

    Игнорировать стоимость эксплуатации: backup, migrations, on-call, observability.

    Смешивать OLTP и тяжелую аналитику в одном кластере без изоляции ресурсов.

    Считать CAP/PACELC теоретическими и не фиксировать явные консистентностные допущения.

    Связанные главы

    References