YDB интересна не только происхождением внутри Yandex, а тем, как распределённый SQL соединяется с платформенным взглядом на мультиарендность, масштабирование и эксплуатацию.
В реальных проектных решениях эта глава помогает думать об изоляции арендаторов, квотах, границах транзакций и пакетной записи как о свойствах всей платформы, а не как о локальных оптимизациях одной команды.
На интервью и в архитектурных обсуждениях она особенно полезна там, где нужно объяснить выбор YDB через отказоустойчивость, управление шумными соседями по ресурсу и предсказуемость на масштабе.
Практическая польза главы
Границы мультитенантности
Проектируйте изоляцию арендаторов и квоты так, чтобы шумный сосед не ломал общий уровень сервиса платформы.
Транзакционные контуры
Определяйте границы транзакций и пакетную запись под особенности распределённого SQL-исполнения.
Эластичность хранения и вычислений
Связывайте стратегию масштабирования с профилем нагрузки и ожидаемыми пиками трафика.
Обоснование решения
Обосновывайте выбор YDB через требования к отказоустойчивости, управлению арендаторами и операционной предсказуемости.
Рамка выбора и редакторский фокус
Фокус главы
распределённой SQL-архитектуре YDB, мультиарендности и масштабировании
Профиль нагрузки
Фокус — транзакционный SQL на горизонтальном и часто региональном масштабе, где один классический узел уже не даёт нужной формы роста.
Когда выбирать
Распределённый SQL оправдан, когда строгие гарантии важнее простоты и команда готова платить задержкой, координацией и эксплуатацией.
Граница и риск
Главные риски — горячие ключи, межрегиональные транзакции, стоимость консенсуса, ребаланс и ложное ощущение бесплатного шардирования.
Связать дальше
Всегда проверяйте решение через базовый вариант PostgreSQL/MySQL, распределённые транзакции и мультирегиональную архитектуру.
Источник
Wikipedia: YDB
Путь YDB от KiWi и KiKiMR до публичной СУБД: релизные вехи и архитектурная рамка одним взглядом.
Официальная документация
YDB Docs: Architecture
Первоисточник по архитектуре: отсутствие общего состояния, таблетки YDB, автоматическое шардирование, распределённые транзакции и слой хранения.
YDB (Yet another DataBase) — распределённая SQL-СУБД с транзакционными гарантиями, автоматическим шардированием и архитектурой без общего состояния. К ней приходят, когда один узел перестаёт держать нагрузку, а ручное шардирование на стороне приложения превращается в источник ошибок. YDB берёт разбиение и координацию на себя, но за это приходится платить проектированием ключей и эксплуатацией распределённого кластера.
здесь — это SQL-интерфейс поверх шардирования, репликации и транзакционной координации. YDB добавляет , и , чтобы приложение не размечало каждое разбиение данных руками. Цена этого удобства — координация, которую теперь ведёт сама база.
Разница между удачным и болезненным внедрением прячется в деталях: , , и решают, останется ли нагрузка локальной и предсказуемой или начнёт платить задержкой межшардовой координации на каждом запросе.
История и контекст
Начало разработки во внутренней инфраструктуре Yandex
Внутри Yandex стартует распределённый слой «ключ-значение» KiWi — фундамент, на котором позже вырастут масштабируемые сервисы.
Переход к распределённой SQL-архитектуре
Архитектура KiKiMR строится вокруг таблеток YDB и акторной модели — этот каркас позже ляжет в основу YDB.
Широкое использование в продуктивных сервисах Yandex
Архитектура YDB-класса несёт высоконагруженные сервисы внутри экосистемы Yandex — проверка боем до выхода наружу.
Публичный релиз с открытым исходным кодом
YDB выходит в открытый доступ как распределённая SQL-СУБД с транзакционными гарантиями и автоматическим шардированием — теперь её можно взять в свой стек.
Стабилизация серверной ветки 24.3
Ветка 24.3 копит исправления и доводит стабильность до уровня, на котором её не страшно держать в продуктивных кластерах.
Новая минорная линейка 25.x
Линейка 25.x продолжает развитие: новые возможности языка SQL, тюнинг производительности и удобство эксплуатации.
Ключевые архитектурные элементы
Таблетки и автоматическое шардирование
Данные таблиц живут в таблетках YDB: при росте нагрузки они сами делятся и переезжают между узлами, так что переразбиение не превращается в ручную операцию выходного дня.
Сериализуемые транзакции
Изоляция — сериализуемая, конкурентная запись — оптимистичная: конфликтующие операции не блокируют друг друга заранее, но при коллизии транзакция откатывается, и это нужно уметь обрабатывать в коде.
Строковые и колоночные таблицы
Одна платформа держит строковые таблицы для транзакционного контура и колоночные — для аналитики рядом, что снимает часть копирования данных в отдельную систему.
Разделение вычислений и хранения
Вычислительный слой отделён от хранения, поэтому ёмкость и нагрузку можно масштабировать порознь; кластер разносится по нескольким зонам и переживает отказ любой из них.
Модель данных и транзакционный контур
Интерактивный блок ниже показывает, как в YDB уживаются строковые и колоночные таблицы, автоматическое шардирование, индексы и распределённые транзакции — и где проходят границы между ними.
Модель данных YDB: таблицы, таблетки и транзакции
YDB совмещает реляционную модель с автоматическим шардированием и распределёнными транзакциями для растущих сервисов.
Почему YDB — это не просто ещё одна SQL-СУБД
- Каждая таблица обязана иметь первичный ключ; данные физически распределяются по таблеткам YDB.
- Есть строковые таблицы для транзакционной обработки и колоночные таблицы для аналитики.
- Поддерживаются распределённые транзакции с сериализуемой изоляцией и оптимистичной конкурентной записью.
- Топики, CDC и асинхронная репликация помогают строить конвейеры данных без внешних брокеров в части сценариев.
Строковые таблицы
Базовый тип для транзакционных нагрузок: первичный ключ обязателен, таблица сортируется по ключу.
Ключевые элементы
Типичные сценарии
- Состояние пользователей
- Заказы и платежи
- Транзакционные API
Пример
CREATE TABLE orders (
tenant_id Uint64,
order_id Uint64,
status Utf8,
amount Uint64,
PRIMARY KEY (tenant_id, order_id)
);Архитектура YDB по слоям
Здесь видно, как запрос проходит сверху вниз: слой клиентского доступа, обработку языка SQL и транзакций, таблетки и шарды, распределённое хранение и механику отказоустойчивости.
Системный взгляд
Модель данных
Операционная цена
Пути чтения и записи через компоненты
На одной диаграмме сведены путь записи и путь чтения: от поиска ответственных таблеток и координатора транзакции до шардов и реплицированного хранения. Именно здесь становится видно, где межшардовая координация добавляет лишний шаг.
Пути чтения и записи
Интерактивный разбор прохождения транзакций и запросов через ключевые компоненты YDB-кластера.
Путь записи
- Первичный ключ определяет, попадёт ли операция в один шард или потребует распределённой транзакции.
- YDB использует сериализуемую изоляцию и оптимистичную конкурентную запись; конфликтующие транзакции могут требовать повтора.
- Межшардовая запись обычно дороже по задержке и ресурсам, чем одношардовая запись.
- 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);Связанные главы
- Фреймворк выбора СУБД - Прежде чем брать YDB, стоит свести требования к консистентности, масштабированию и стоимости эксплуатации — здесь разобран сам способ выбора.
- PostgreSQL: история и архитектура - С чем сравнивать YDB: классический транзакционный подход с основным узлом и репликами против распределённого SQL-контура.
- Cassandra: архитектура и компромиссы - Другой полюс компромисса: распределённый SQL против нереляционной (NoSQL) модели, ориентированной на доступность в ущерб согласованности (AP по теореме CAP), — сравнение по консистентности и форме запросов.
- Распределённые транзакции: двухфазная и трёхфазная фиксация - Что стоит за словом «координация»: механика согласования транзакций и плата задержкой и доступностью в распределённых сценариях записи.
- ClickHouse: аналитическая СУБД и архитектура - Где проходит граница: когда колоночных таблиц YDB уже мало и контур стоит дополнить отдельной аналитической системой.
- CockroachDB: распределённая SQL-СУБД и архитектура - Ближайший аналог для сравнения: две распределённые SQL-платформы бок о бок — межрегиональное поведение, транзакционные гарантии и операционный профиль.
