Repolode
erikgrinaker

erikgrinaker/toydb

分散SQLシステムの仕組みを学ぶためにRustで実装された教育用データベース。Raft合意、MVCCトランザクション、SQLインターフェースを備えています。

スター
7,304
フォーク
625
未解決の Issue
0
最終コミット
先月

これは何?

toyDBは、分散SQLシステムの仕組みを示すためにRustで一から構築された分散SQLデータベースです。Raft合意を使ってクラスター全体に状態を複製し、線形化可能なステートマシンレプリケーションを実現します。また、MVCCベースのスナップショット分離によるACIDトランザクションを提供します。

ストレージ層は差し替え可能で、BitCaskバックエンドとインメモリバックエンドを利用できます。キーバリューストアの上にはイテレーター方式のクエリエンジンがあり、ヒューリスティック最適化や過去の時点のデータを読み取る機能を備えています。さらに、JOIN、集約、トランザクションに対応したSQLインターフェースを提供します。コマンドラインクライアントのtoysqlでノードに接続でき、EXPLAINでクエリプランを確認できます。

このプロジェクトは、性能、スケーラビリティ、可用性よりもシンプルさと正確性を重視しているため、コードを読むことを想定しています。テストの多くはGoldenscriptベースのシナリオテストで、リポジトリにはアーキテクチャガイドとワークロードベンチマークツールも含まれています。

主な機能

  • 01クラスター内で線形化可能なレプリケーションを実現するRaft合意
  • 02MVCCスナップショット分離を備えたACIDトランザクション
  • 03BitCaskとインメモリエンジンに対応した差し替え可能なストレージ
  • 04JOIN、集約、トランザクションに対応したSQL
  • 05ヒューリスティック最適化後のクエリプランを表示するEXPLAIN

ユースケース

  • 分散SQLデータベースの内部構造を学ぶ
  • 読みやすいRustのコードベースを通じてRaft合意とMVCCトランザクションを学ぶ
  • ローカルマシンで小規模なマルチノードSQLクラスターを試す

クイックスタート

  1. 1

    Rustコンパイラをインストールします(Rustのインストールページを参照)

  2. 2

    ローカルで5ノードのクラスターを起動します

    ./cluster/run.sh
  3. 3

    コマンドラインクライアントをビルドして実行し、ノード1に接続します

    cargo run --release --bin toysql

使う前に知っておきたいこと

  • パフォーマンス、スケーラビリティ、可用性を明示的に最適化していません。
  • fsyncと書き込みのバッチ処理がないため、書き込み性能は非常に低いです。
  • 本番利用ではなく、教育目的のプロジェクトとして開発されています。

収録されている特集

トピック

よくある質問

toydb とは?
分散SQLシステムの仕組みを学ぶためにRustで実装された教育用データベース。Raft合意、MVCCトランザクション、SQLインターフェースを備えています。 toyDBは、分散SQLシステムの仕組みを示すためにRustで一から構築された分散SQLデータベースです。Raft合意を使ってクラスター全体に状態を複製し、線形化可能なステートマシンレプリケーションを実現します。また、MVCCベースのスナップショット分離によるACIDトランザクションを提供します。
toydb は無料で使えますか?ライセンスは?
toydb は Apache-2.0 ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
toydb は今もメンテナンスされていますか?
半年以内に更新あり。toydb の最終コミットは 2026年10月2日 です。
toydb は何に使えますか?
分散SQLデータベースの内部構造を学ぶ 読みやすいRustのコードベースを通じてRaft合意とMVCCトランザクションを学ぶ ローカルマシンで小規模なマルチノードSQLクラスターを試す
toydb のインストール方法は?
Rustコンパイラをインストールします(Rustのインストールページを参照) ローカルで5ノードのクラスターを起動します: ./cluster/run.sh コマンドラインクライアントをビルドして実行し、ノード1に接続します: cargo run --release --bin toysql
toydb はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/erikgrinaker/toydb

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト