Переписали ToyDB — теперь это open-source распределённая SQL-база на Rust. Идеально для изучения основ баз данных и Rust! 🦀📊 Код чистый, документация подробная. Погружаемся в мир distributed systems без боли.
Введение в ToyDB
ToyDB — это распределённая SQL-база данных, написанная на Rust с нуля в образовательных целях. Проект демонстрирует ключевые концепции построения распределённых СУБД, включая механизмы репликации, транзакции и обработку SQL-запросов.
Ключевые особенности архитектуры
1. Механизм распределённого консенсуса Raft
- Реализация линейного согласованного реплицирования state machine
- Лидер-фолловер модель с выборами и логами репликации
2. Транзакции с уровнем изоляции ACID
- Мультиверсионный контроль параллелизма (MVCC)
- Снапшот-изоляция для непротиворечивости данных
3. Подключаемая система хранения
- Два движка на выбор: BitCask (логирование) и in-memory
- Простая API для интеграции новых бэкендов
4. SQL-движок с оптимизацией запросов
- Поддержка JOIN, агрегатных функций, подзапросов
- Эвристическая оптимизация планов выполнения
- Возможность «путешествия во времени» по данным
Практическое применение
Запуск кластера
Для тестирования ToyDB можно развернуть локальный кластер из пяти узлов:
$ ./cluster/run.sh
Starting 5 nodes on ports 9601-9605 with data under cluster/*/data/.
Пример работы с SQL
-- Создание таблицы и вставка данных CREATE TABLE movies (id INTEGER PRIMARY KEY, title VARCHAR NOT NULL); INSERT INTO movies VALUES (1, 'Sicario'), (2, 'Stalker'), (3, 'Her'); -- Комплексный запрос с JOIN и агрегацией EXPLAIN SELECT m.title, g.name AS genre FROM movies m JOIN genres g ON m.genre_id = g.id;
Сравнительный анализ производительности
| Workload | BitCask | BitCask (без fsync) | In-Memory |
|---|---|---|---|
| read | 14163 | 13941 | 13949 |
| write | 35 | 4719 | 7781 |
| bank | 21 | 1120 | 1346 |
Все значения в транзакциях/секунду
Ограничения и образовательная ценность
ToyDB сознательно жертвует:
- Производительностью (отсутствие батчинга в Raft)
- Масштабируемостью (фиксированный размер кластера)
- Отказоустойчивостью (упрощённая обработка сбоев)
Проект идеально подходит для изучения:
- Принципов работы распределённых СУБД
- Реализации ACID-транзакций
- Оптимизации SQL-запросов
Заключение
ToyDB представляет собой отличный учебный полигон для:
- Разработчиков СУБД, изучающих внутреннее устройство баз данных
- Rust-инженеров, интересующихся распределёнными системами
- Студентов курсов по системам хранения данных
Проект продолжает развиваться, сохраняя баланс между простотой кода и корректностью реализации ключевых алгоритмов.