How minhh-nguyen/toydb-pams works
toyDB is a distributed SQL database with a workload benchmark and experiment-analysis tools. The primary path is a SQL client sending a statement to a server, where a session parses and plans it, executes against transaction/catalog and storage layers, and returns results. Writes are coordinated through Raft replication; the README also documents workload generation and plotting/analysis of experiment data. Some subsystem internals were not sampled, so their detailed calls are omitted rather than inferred.
Main entry points: server.rs SQL and Raft server · session.rs SQL session · node.rs Raft node · executor.rs SQL executor
Components 25
Clients and service
- SQL client
src/bin/toysql.rs - SQL and Raft server
src/server.rs
SQL processing
- SQL session
src/sql/execution/session.rs - Lexer and parser
src/sql/parser/parser.rs - Planner and optimizer
src/sql/planner/planner.rs - Execution plans
src/sql/planner/plan.rs - SQL executor
src/sql/execution/executor.rs - Aggregations and joins
src/sql/execution - SQL types and schema
src/sql/types - SQL engine
src/sql/engine/engine.rs
Raft consensus
- Raft node
src/raft/node.rs - Raft log
src/raft/log.rs - Raft messages
src/raft/message.rs - Raft state
src/raft/state.rs
Storage and encoding
- MVCC transactions
src/storage/mvcc.rs - Storage engines
src/storage/engine.rs - BitCask and memory
src/storage - Key and value encoding
src/encoding/keycode.rs
Benchmark analysis
- Workload benchmark
src/bin/workload.rs - Experiment data analysis
plot/config.py - Experiment charts
plot
Other components
- SQL user
- Database cluster
- CSV experiment data
- Experiment analyst
Connections 25
- SQL user → SQL client: submits SQL
- SQL client → SQL and Raft server: sends requests
- SQL and Raft server → SQL session: creates session
- SQL session → Lexer and parser: parses SQL
- SQL session → Planner and optimizer: builds plan
- Planner and optimizer → SQL types and schema: uses schema
- SQL session → SQL engine: opens transaction
src/sql/execution/session.rs - SQL engine → MVCC transactions: uses MVCC
src/sql/engine/engine.rs - Execution plans → SQL executor: executes plan
- SQL executor → Aggregations and joins: delegates operators
src/sql/execution/mod.rs - SQL executor → SQL engine: reads and writes
- SQL and Raft server → Database cluster: serves SQL and Raft
src/server.rs - SQL and Raft server → Raft node: routes Raft requests
src/server.rs - Raft node → Raft log: manages log
src/raft/node.rs - Raft node → Raft messages: exchanges messages
src/raft/node.rs - Raft node → Raft state: applies state
src/raft/node.rs - Raft log → Storage engines: persists log
src/raft/log.rs - MVCC transactions → Storage engines: stores versions
src/storage/mvcc.rs - Storage engines → BitCask and memory: implemented by
src/storage/mvcc.rs - MVCC transactions → Key and value encoding: encodes keys
src/storage/mvcc.rs - Workload benchmark → Database cluster: benchmarks
- Database cluster → CSV experiment data: produces measurements
- CSV experiment data → Experiment data analysis: loads CSV
plot/config.py - Experiment data analysis → Experiment charts: supports charts
plot/exp1/compare-latency.py - Experiment analyst → Experiment charts: generates charts