最終的なアーキテクチャ図。
入口: overview.md を参照してください。 設計判断: decisions.md を参照してください。 学習ログ: log/ を参照してください。
┌─────────────────────────────────────────────────────────┐
│ SQL Layer │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Parser │→│ Planner │→│ Query Executor │ │
│ │ (sql) │ │ (query) │ │ (query) │ │
│ └──────────┘ └──────────┘ └────────┬─────────┘ │
│ │ │
├──────────────────────────────────────────┼───────────────┤
│ │ │
│ ┌──────────────────────────────────────▼─────────┐ │
│ │ Transaction Manager │ │
│ │ (ACID, Concurrency Control, Recovery) │ │
│ └────────────────────────────────────────────────┘ │
│ │ │
├──────────────────────────────────────────┼───────────────┤
│ │ │
│ ┌──────────────────────────────────────▼─────────┐ │
│ │ Storage Engine │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │ │
│ │ │Buffer │ │B-Tree │ │ Page Manager │ │ │
│ │ │Pool │ │Index │ │ │ │ │
│ │ └─────────┘ └─────────┘ └─────────────────┘ │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ WAL (Write-Ahead Log) │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────┘ │
│ │ │
├──────────────────────────────────────────┼───────────────┤
│ │ │
│ ┌──────────────────────────────────────▼─────────┐ │
│ │ Disk I/O │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
crates/
├── storage/ # ストレージエンジン
│ ├── page.rs # ページ管理
│ ├── btree.rs # B-tree実装
│ ├── buffer_pool.rs # バッファプール
│ └── wal.rs # Write-ahead logging
│
├── sql/ # SQLパーサー
│ ├── ast.rs # 抽象構文木
│ ├── lexer.rs # 字句解析
│ └── parser.rs # 構文解析
│
├── query/ # クエリエンジン
│ ├── planner.rs # クエリプランナー
│ ├── executor.rs # クエリエグゼキューター
│ └── optimizer.rs # オプティマイザー
│
├── catalog/ # データ辞書
│ ├── schema.rs # スキーマ管理
│ ├── table.rs # テーブルメタデータ
│ └── index.rs # インデックスメタデータ
│
└── types/ # 共通型定義
└── lib.rs # データ型、値
- Parser: SQLをASTに変換 (
sql::parser) - Planner: 実行プランの生成 (
query::planner) - Optimizer: プランの最適化 (
query::optimizer) - Executor: プランを実行して結果を返す (
query::executor)
- ACID特性の保証
- 同時実行制御(
parking_lotによるロック、MVCC) - WALによる回復
- Buffer Pool: ページのキャッシュ管理
- B-Tree: インデックス構造
- Page Manager: ディスク上のページ管理
- WAL: Write-Ahead Logging
- スキーマ管理
- テーブル・カラム・インデックスのメタデータ
- 共通データ型(DataType, Value)
- エラー型
┌──────────┐
│ main │
└─────┬────┘
│
├─────────────┐
│ │
┌─────▼─────┐ ┌───▼────┐
│ query │ │ sql │
└─────┬─────┘ └────────┘
│
├─────────────┬─────────────┐
│ │ │
┌─────▼─────┐ ┌────▼────┐ ┌────▼────┐
│ storage │ │ catalog │ │ types │
└───────────┘ └─────────┘ └─────────┘
- クライアントからSQLクエリを受信
sql::ParserがASTを生成query::Plannerが実行プランを作成query::Optimizerがプランを最適化query::Executorがプランを実行storage::StorageEngineがデータアクセスcatalog::Catalogがメタデータを提供