Yandex Database — MVCC в распределенной базе данных Базы данных и системы хранения

Доклад принят в программу конференции
Андрей Фомичев
Яндекс

Руководитель Yandex Database. Руководит отделом разработки систем хранения и обработки данных, в который входит команда Yandex Database. Отвечает за слой хранения данных в Yandex.Cloud. До этого занимался веб-роботом Поиска, задачами управления данными в департаменте инфраструктуры.

Тезисы

В докладе расскажем про особенности выполнения распределенных транзакций, что мы делаем для того, чтобы их поведение было привычным для пользователя. Мы хотим предоставить возможность взятия снапшота всей базы на начало выполнения транзакции, но без MVCC эта операция очень дорогая, так как в интерактивной транзакции заранее не известно, какие таблицы или диапазоны ключей будут затронуты. Реализация MVCC позволяет нам читать состояние базы на нужный момент времени в прошлом и задача взятия снапшота сводится к выбору глобального Timestamp.

Погрузимся в особенности реализации MVCC в YDB:
— MVCC поверх LSM деревьев;
— Как мы сделали MVCC с консистентными снапшотами в распределенной базе данных;
— почему выбрали глобальные, а не локальные таймстемпы.

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

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

Другие доклады секции Базы данных и системы хранения