Repolode
erikgrinaker

erikgrinaker/toydb

Распределённая SQL-база данных на Rust, созданная в учебных целях: поддерживает консенсус Raft, транзакции MVCC и интерфейс SQL.

Звёзды
7,304
Форки
624
Открытые issues
0
Последний коммит
в прошлом месяце

Что это?

toyDB — распределённая SQL-база данных, написанная с нуля на Rust, чтобы показать, как устроены распределённые SQL-системы. Она реплицирует состояние между узлами кластера с помощью консенсуса Raft, обеспечивающего линеаризуемую репликацию конечного автомата, и поддерживает ACID-транзакции с изоляцией снимков на основе MVCC.

Слой хранения можно подключать отдельно: доступны бэкенды BitCask и in-memory. Поверх хранилища «ключ—значение» работает механизм запросов на основе итераторов: он применяет эвристическую оптимизацию и поддерживает чтение данных на заданный момент времени. SQL-интерфейс поддерживает соединения, агрегатные функции и транзакции. Клиент командной строки toysql подключается к узлам, а EXPLAIN показывает планы запросов.

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

Ключевые возможности

  • 01Консенсус Raft для линеаризуемой репликации между узлами кластера
  • 02ACID-транзакции с изоляцией снимков на основе MVCC
  • 03Подключаемые хранилища: BitCask и in-memory
  • 04Поддержка в SQL соединений, агрегатных функций и транзакций
  • 05Вывод EXPLAIN с планами запросов после эвристической оптимизации

Сценарии использования

  • Изучение внутреннего устройства распределённых SQL-баз данных
  • Изучение консенсуса Raft и транзакций MVCC на примере понятного кода на Rust
  • Эксперименты с небольшим многоузловым SQL-кластером на локальной машине

Быстрый старт

  1. 1

    Установите компилятор Rust (см. страницу установки Rust).

  2. 2

    Запустите локальный кластер из пяти узлов.

    ./cluster/run.sh
  3. 3

    Соберите и запустите клиент командной строки, чтобы подключиться к узлу 1.

    cargo run --release --bin toysql

Что важно знать

  • Проект намеренно не оптимизирован для производительности, масштабируемости или доступности.
  • Производительность записи очень низкая из-за fsync и отсутствия пакетной записи.
  • Проект создан в образовательных целях, а не для использования в production.

В подборках

Темы

Частые вопросы

Что такое toydb?
Распределённая SQL-база данных на Rust, созданная в учебных целях: поддерживает консенсус Raft, транзакции MVCC и интерфейс SQL. toyDB — распределённая SQL-база данных, написанная с нуля на Rust, чтобы показать, как устроены распределённые SQL-системы. Она реплицирует состояние между узлами кластера с помощью консенсуса Raft, обеспечивающего линеаризуемую репликацию конечного автомата, и поддерживает ACID-транзакции с изоляцией снимков на основе MVCC.
toydb можно использовать бесплатно? Какая у него лицензия?
toydb распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
toydb всё ещё поддерживается?
Обновлялся за последние 6 месяцев. Последний коммит в toydb — 2 окт. 2026 г..
Для чего можно использовать toydb?
Изучение внутреннего устройства распределённых SQL-баз данных Изучение консенсуса Raft и транзакций MVCC на примере понятного кода на Rust Эксперименты с небольшим многоузловым SQL-кластером на локальной машине
Как установить toydb?
Установите компилятор Rust (см. страницу установки Rust). Запустите локальный кластер из пяти узлов.: ./cluster/run.sh Соберите и запустите клиент командной строки, чтобы подключиться к узлу 1.: cargo run --release --bin toysql
Где скачать toydb?
Исходный код и инструкции по установке — на GitHub: https://github.com/erikgrinaker/toydb

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты