本课程提供 Go、Rust、Java、C++ 四种语言的完整实现。你可以选择自己熟悉的语言跟着做,也可以对比多种语言的实现来加深理解。
语法简洁,标准库强大,非常适合快速实现存储引擎原型。课程主要参考实现。
内存安全、零成本抽象,适合追求高性能和安全性。学习曲线稍陡但收获丰厚。
生态成熟,企业级首选。通过实现存储引擎可以深入理解 NIO、ByteBuffer 等底层 API。
贴近硬件,性能极致。适合想深入理解内存管理和系统编程的开发者。
go/、rust/、java/、cpp/。你可以随时切换查看。
课程代码托管在 GitHub 上,每个章节对应一个 Git 提交:
git checkout 到对应的提交查看参考实现。每写完一章,和参考实现对比一下,看看有没有更好的写法。
请根据你选择的语言,安装对应的开发环境。点击下方的语言标签查看安装步骤。
需要 Go 1.19 或更高版本。
Go 的依赖管理使用 go.mod,已经配置好了,go mod tidy 会自动下载所有依赖。
使用 rustup 安装 Rust 工具链,需要 Rust 1.70 或更高版本。
Rust 使用 Cargo.toml 管理依赖,cargo build 会自动下载并编译所有依赖。
需要 JDK 11 或更高版本,以及 Maven 3.6+。
Java 项目使用 Maven 管理,依赖定义在 pom.xml 中。JUnit 4 用于单元测试。
需要支持 C++17 的编译器和 CMake 3.14+。
fatal error: 'string' file not found,说明系统自带的 CommandLineTools 缺少 C++ 标准库头文件。可以安装 Homebrew 的 LLVM 并指定编译器:
cmake .. \
-DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm/bin/clang++ \
-DCMAKE_C_COMPILER=/opt/homebrew/opt/llvm/bin/clang \
-DCMAKE_EXE_LINKER_FLAGS="-L/opt/homebrew/opt/llvm/lib/c++ -Wl,-rpath,/opt/homebrew/opt/llvm/lib/c++"
C++ 使用 CMake 构建系统,Google Test 会通过 FetchContent 自动下载。
| 语言 | 推荐工具 | 说明 |
|---|---|---|
| Go | VS Code + Go 扩展 / GoLand | Go 官方的 VS Code 扩展(gopls)体验很好 |
| Rust | VS Code + rust-analyzer / RustRover | rust-analyzer 提供优秀的代码补全和类型推断 |
| Java | IntelliJ IDEA / VS Code + Java 扩展 | IDEA 社区版免费,Java 开发体验最佳 |
| C++ | VS Code + clangd / CLion | clangd 提供代码补全和错误检查 |
从第 4 章开始,我们会按照以下结构逐步构建代码:
codepie-1-kv-storage/
├── go/ # Go 实现
│ ├── go.mod
│ ├── data/ # 数据文件、日志记录
│ ├── fio/ # 文件 IO 管理
│ ├── index/ # 内存索引
│ └── ...
├── rust/ # Rust 实现
│ ├── Cargo.toml
│ └── src/
├── java/ # Java 实现
│ ├── pom.xml
│ └── src/
└── cpp/ # C++ 实现
├── CMakeLists.txt
├── src/
└── tests/
每种语言的代码独立组织,但逻辑结构基本一致:数据层(data)、IO 层(fio)、索引层(index)、引擎层(db / engine)。
go test / cargo test / mvn test / ctest 确认环境正常。一切准备就绪!下一章我们开始写第一行代码 —— 实现文件 IO 和内存索引。