System Design Space
Граф знанийНастройки

Обновлено: 3 мая 2026 г. в 21:25

YDB: распределённая SQL-СУБД и архитектура

средний

Распределённая SQL-СУБД YDB: автоматическое шардирование, таблетки, транзакционные гарантии модели ACID, строковые и колоночные таблицы, архитектура без общего состояния и цена межшардовой координации.

YDB интересна не только происхождением внутри Yandex, а тем, как распределённый SQL соединяется с платформенным взглядом на мультиарендность, масштабирование и эксплуатацию.

В реальных проектных решениях эта глава помогает думать об изоляции арендаторов, квотах, границах транзакций и пакетной записи как о свойствах всей платформы, а не как о локальных оптимизациях одной команды.

На интервью и в архитектурных обсуждениях она особенно полезна там, где нужно объяснить выбор YDB через отказоустойчивость, управление шумными соседями по ресурсу и предсказуемость на масштабе.

Практическая польза главы

Границы мультитенантности

Проектируйте изоляцию арендаторов и квоты так, чтобы шумный сосед не ломал общий уровень сервиса платформы.

Транзакционные контуры

Определяйте границы транзакций и пакетную запись под особенности распределённого SQL-исполнения.

Эластичность хранения и вычислений

Связывайте стратегию масштабирования с профилем нагрузки и ожидаемыми пиками трафика.

Обоснование решения

Обосновывайте выбор YDB через требования к отказоустойчивости, управлению арендаторами и операционной предсказуемости.

Источник

Wikipedia: YDB

История YDB от KiWi и KiKiMR до публичной СУБД, ключевые релизные вехи и общая архитектурная рамка.

Открыть статью

Официальная документация

YDB Docs: Architecture

Обзор архитектуры: отсутствие общего состояния, таблетки YDB, автоматическое шардирование, распределённые транзакции и слой хранения.

Открыть docs

YDB (Yet another DataBase) — распределённая SQL-СУБД с транзакционными гарантиями, автоматическим шардированием и архитектурой без общего состояния. В системном дизайне YDB часто выбирают для высоконагруженных backend-сервисов, где важны строгая консистентность, масштабирование по ключам и единая платформа для операционных и аналитических задач.

В этой главе под понимаем SQL-интерфейс поверх шардирования, репликации и транзакционной координации. YDB добавляет , и , чтобы приложение не управляло каждым разбиением данных вручную.

Практический смысл проявляется в деталях: , сериализуемость, и определяют, будет ли нагрузка локальной и предсказуемой или начнёт платить ценой межшардовой координации.

История и контекст

2010KiWi

Начало разработки во внутренней инфраструктуре Yandex

В Yandex начинается проект распределённого слоя «ключ-значение» KiWi как основа для масштабируемых сервисов.

2012KiKiMR

Переход к распределённой SQL-архитектуре

Развивается архитектура KiKiMR с таблетками YDB и акторной моделью, которая позже ляжет в основу YDB.

2016внутренний запуск

Широкое использование в продуктивных сервисах Yandex

YDB-класс архитектуры применяется для высоконагруженных сервисов внутри экосистемы Yandex.

19 апреля 2022v22.1.5

Публичный релиз с открытым исходным кодом

YDB становится доступной как распределённая SQL-СУБД с транзакционными гарантиями и автоматическим шардированием.

6 февраля 2025v24.3.15.5

Стабилизация серверной ветки 24.3

Ветка 24.3 получает релизы с исправлениями и улучшениями стабильности для продуктивных кластеров.

15 сентября 2025v25.1.4.7

Новая минорная линейка 25.x

Развитие ветки 25.x с улучшениями SQL-функциональности, производительности и операционных сценариев.

Ключевые архитектурные элементы

Таблетки и автоматическое шардирование

Данные таблиц распределяются по таблеткам YDB, которые автоматически делятся и перемещаются при росте нагрузки.

Сериализуемые транзакции

YDB даёт транзакции с сериализуемой изоляцией и оптимистичной конкурентной записью для конкурирующих операций.

Строковые и колоночные таблицы

В одной платформе доступны строковые таблицы для транзакционного контура и колоночные таблицы для аналитики.

Разделение вычислений и хранения

Архитектура разделяет вычислительный слой и хранение, а также поддерживает отказоустойчивые кластеры в нескольких зонах.

Модель данных и транзакционный контур

Интерактивный блок показывает, как в YDB сочетаются строковые и колоночные таблицы, автоматическое шардирование, индексы и распределённые транзакции в общей архитектуре.

Модель данных YDB: таблицы, таблетки и транзакции

YDB совмещает реляционную модель с автоматическим шардированием и распределёнными транзакциями для растущих сервисов.

Почему YDB — это не просто ещё одна SQL-СУБД

  • Каждая таблица обязана иметь первичный ключ; данные физически распределяются по таблеткам YDB.
  • Есть строковые таблицы для транзакционной обработки и колоночные таблицы для аналитики.
  • Поддерживаются распределённые транзакции с сериализуемой изоляцией и оптимистичной конкурентной записью.
  • Топики, CDC и асинхронная репликация помогают строить конвейеры данных без внешних брокеров в части сценариев.

Строковые таблицы

Базовый тип для транзакционных нагрузок: первичный ключ обязателен, таблица сортируется по ключу.

Ключевые элементы

PRIMARY KEYDataShardТочечные чтенияДиапазоны по ключу

Типичные сценарии

  • Состояние пользователей
  • Заказы и платежи
  • Транзакционные API

Пример

CREATE TABLE orders (
  tenant_id Uint64,
  order_id Uint64,
  status Utf8,
  amount Uint64,
  PRIMARY KEY (tenant_id, order_id)
);

Архитектура YDB по слоям

Ниже показан слой клиентского доступа, SQL и транзакций, таблетки и шарды, распределённое хранение и механики отказоустойчивости.

Клиенты и доступ
gRPC + SDKПоиск узлаYQL / SQLCLI + API
переход между слоями
Запросы и транзакции
Разбор и оптимизацияСериализуемостьOCCКоординатор транзакций
переход между слоями
Таблетки и шарды
DataShard / ColumnShardSchemeShardHiveДеление и слияние
переход между слоями
Распределённое хранение
PDisk / VDiskDSProxyСинхронная репликацияBLOB-хранилище
переход между слоями
Отказоустойчивость и масштаб
Без общего состояния3 зоны доступностиАвтобалансировкаВычисления отдельно от хранения
переход между слоями
Профили нагрузки
Строковые таблицыКолоночные таблицыТопики + CDCВекторные индексы

Системный взгляд

Распределённый SQLСтрогая консистентностьТранзакции + аналитика

Модель данных

Первичный ключ обязателенСтроковые и колоночные движкиИерархия каталогов

Операционная цена

Стоимость межшардовых транзакцийКлючи влияют на локальностьКластер требует дисциплины

Пути чтения и записи через компоненты

Диаграмма объединяет путь записи и путь чтения: от поиска ответственных таблеток и координатора транзакции до шардов и реплицированного хранения.

Пути чтения и записи

Интерактивный разбор прохождения транзакций и запросов через ключевые компоненты YDB-кластера.

1
Клиентская транзакция
UPSERT UPDATE REPLACE
2
Маршрутизация
карта таблеток
3
Координация транзакции
сериализуемость OCC
4
Применение на шардах
DataShard/ColumnShard
5
Фиксация на репликах
DSProxy хранилище
Путь записи: запрос маршрутизируется к целевым шардам, проходит координацию транзакции и подтверждается после фиксации в реплицированном хранилище.

Путь записи

  1. Первичный ключ определяет, попадёт ли операция в один шард или потребует распределённой транзакции.
  2. YDB использует сериализуемую изоляцию и оптимистичную конкурентную запись; конфликтующие транзакции могут требовать повтора.
  3. Межшардовая запись обычно дороже по задержке и ресурсам, чем одношардовая запись.
  4. DDL и DML не комбинируются в одной транзакции: изменения схемы выполняются отдельно и идемпотентно.

Когда выбирать YDB

Хорошо подходит

  • Высоконагруженные транзакционные сервисы, где нужны строгая консистентность и автоматическое шардирование.
  • Сценарии с ростом данных и нагрузки, где важна горизонтальная масштабируемость архитектуры без общего состояния.
  • Системы, где рядом нужны транзакционный контур и аналитика на колоночных таблицах.
  • Команды, готовые инвестировать в проектирование ключей и эксплуатацию распределённой SQL-платформы.

Стоит избегать

  • Небольшие проекты на одном узле, где проще локальная БД без распределённой сложности.
  • Нагрузки с очень частыми межшардовыми транзакциями без продуманного разбиения по ключам.
  • Сценарии, где нужна минимальная операционная сложность и нет ресурсов на сопровождение кластера.
  • Сценарии, где доминирует полнотекстовый поиск или чистая аналитика без транзакционного контура.

Практика: DDL и DML

Ниже примеры DDL и DML для YDB: проектирование схемы и индексов, транзакционные операции UPSERT/UPDATE и выборки по ключевым диапазонам.

Примеры DDL и DML в YDB

DDL задаёт схему и партиционирование, DML работает с транзакциями, записью и запросами чтения.

В YDB DDL-операции с таблицами, индексами и партиционированием выполняются отдельно от DML-транзакций и должны быть идемпотентными.

Создание строковой таблицы с автопартиционированием

CREATE TABLE

Первичный ключ обязателен; автоматическое партиционирование помогает масштабироваться при росте нагрузки.

CREATE TABLE orders (
  tenant_id Uint64,
  order_id Uint64,
  status Utf8,
  amount Uint64,
  created_at Timestamp,
  PRIMARY KEY (tenant_id, order_id)
)
WITH (
  AUTO_PARTITIONING_BY_SIZE = ENABLED,
  AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = 8
);

Добавление глобального вторичного индекса

ALTER TABLE ... ADD INDEX

Индекс улучшает доступ по неключевым полям, но увеличивает стоимость записи.

ALTER TABLE orders
ADD INDEX idx_status GLOBAL ASYNC ON (status);

Создание колоночной таблицы для аналитики

CREATE TABLE ... STORE=COLUMN

Для OLAP-сценариев используем колоночное хранение и хеш-партиционирование.

CREATE TABLE events_olap (
  ts Timestamp NOT NULL,
  tenant_id Uint64 NOT NULL,
  event_type Utf8,
  payload Json,
  PRIMARY KEY (ts, tenant_id)
)
PARTITION BY HASH(tenant_id)
WITH (STORE = COLUMN);

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

Чтобы отмечать прохождение, включи трекинг в Настройки