Repolode
erikgrinaker

erikgrinaker/toydb

用 Rust 编写的分布式 SQL 数据库教学项目,包含 Raft 共识、MVCC 事务和 SQL 接口。

Star
7,304
Fork
625
未关闭 Issue
0
最近提交
上个月

这是什么?

toyDB 是一个用 Rust 从零实现的分布式 SQL 数据库,用来演示分布式 SQL 系统的工作原理。它使用 Raft 共识在集群内复制状态,提供可线性化的状态机复制;事务层基于 MVCC 实现快照隔离的 ACID 事务。

存储层可插拔,目前提供 BitCask 和内存两种后端。键值存储之上是基于迭代器的查询引擎,支持启发式优化和时间旅行读取,SQL 接口涵盖连接、聚合和事务。命令行客户端 toysql 可以连接节点,EXPLAIN 可查看查询计划。

项目优先保证简单与正确性,性能、可扩展性和可用性不在目标之内,因此代码主要用于阅读和学习。测试以 Goldenscript 场景测试为主,仓库还附带架构导览和负载基准工具。

核心功能

  • 01基于 Raft 共识实现集群间的可线性化复制
  • 02基于 MVCC 快照隔离的 ACID 事务
  • 03可插拔存储,提供 BitCask 与内存两种引擎
  • 04支持连接、聚合和事务等 SQL 功能
  • 05通过 EXPLAIN 查看经启发式优化后的查询计划

适用场景

  • 学习分布式 SQL 数据库的内部架构
  • 通过可读的 Rust 代码研究 Raft 共识与 MVCC 事务
  • 在本地搭建小型多节点 SQL 集群进行实验

快速上手

  1. 1

    安装 Rust 编译器

  2. 2

    启动本地五节点集群

    ./cluster/run.sh
  3. 3

    构建并运行命令行客户端连接节点 1

    cargo run --release --bin toysql

使用前须知

  • 明确不以性能、可扩展性或可用性为优化目标。
  • 由于 fsync 且 Raft 层缺少写入批处理,写入性能很差。
  • 它是一个教学项目,并非为生产环境设计。

收录于专题

标签

常见问题

toydb 是什么?
用 Rust 编写的分布式 SQL 数据库教学项目,包含 Raft 共识、MVCC 事务和 SQL 接口。 toyDB 是一个用 Rust 从零实现的分布式 SQL 数据库,用来演示分布式 SQL 系统的工作原理。它使用 Raft 共识在集群内复制状态,提供可线性化的状态机复制;事务层基于 MVCC 实现快照隔离的 ACID 事务。
toydb 可以免费使用吗?用的什么许可证?
toydb 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
toydb 还在维护吗?
半年内有更新。toydb 最近一次提交是在 2026年10月2日。
toydb 适合用来做什么?
学习分布式 SQL 数据库的内部架构 通过可读的 Rust 代码研究 Raft 共识与 MVCC 事务 在本地搭建小型多节点 SQL 集群进行实验
toydb 怎么安装和运行?
安装 Rust 编译器 启动本地五节点集群: ./cluster/run.sh 构建并运行命令行客户端连接节点 1: cargo run --release --bin toysql
在哪里获取 toydb?
源代码和安装说明在 GitHub 上:https://github.com/erikgrinaker/toydb

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目