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

Обновлено: 24 июня 2026 г. в 17:01

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

средний

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

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

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

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

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

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

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

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

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

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

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

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

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

Рамка выбора и редакторский фокус

Фокус главы

распределённой SQL-архитектуре YDB, мультиарендности и масштабировании

Профиль нагрузки

Фокус — транзакционный SQL на горизонтальном и часто региональном масштабе, где один классический узел уже не даёт нужной формы роста.

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

Распределённый SQL оправдан, когда строгие гарантии важнее простоты и команда готова платить задержкой, координацией и эксплуатацией.

Граница и риск

Главные риски — горячие ключи, межрегиональные транзакции, стоимость консенсуса, ребаланс и ложное ощущение бесплатного шардирования.

Связать дальше

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

Источник

Wikipedia: YDB

Путь YDB от KiWi и KiKiMR до публичной СУБД: релизные вехи и архитектурная рамка одним взглядом.

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

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

YDB Docs: Architecture

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

Открыть docs

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

здесь — это 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 — это не просто ещё одна 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

Ниже примеры для YDB на уровне определения данных (DDL) и манипуляций данными (DML): проектирование схемы и индексов, транзакционные операции 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);

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

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