Beaker
的开发目标是一个使用Rust
开发的分布式KV
数据库,用于学习Rust
/数据库/分布式系统。
如果你是Rust
开发者,使用cargo
编译与构建工程。
# 在给定的path下与info等级的日志下,运行数据库服务端
RUST_LOG=info cargo run --release --bin server -- --root-path $path
# 运行命令行客户端工具
cargo run --release --bin cli
# 使用类似于redis的命令操作数据库
get key
set key val
del key
ping msg
# 或者使用 src/client 模块下的Client客户端操作数据库
async {
let client = Client::connect($addr).await?;
client.ping(None).await?;
}
如果你想安装server
和cli
,使用cargo install --path .
。
如果你想卸载,使用cargo uninstall beaker
。
相关模块导引如下:
src/engine
: 基于LSM-Tree
的存储引擎。src/server
: 数据库服务器实现。src/cmd
: 类似Redis
的命令库。src/cli
: 命令行客户端工具。src/client
:Rust
客户端。src/resp
:RESP
协议,用于客户端和服务端之间交换数据。src/raft
:RAFT
协议,用于数据库节点之间交换数据。
- 支持基础的
get
/set
/del
等操作。
- 基于
LevelDB
设计思路的KV
存储引擎-
memtable+log
实现 -
manifest
实现 -
sstable
实现 - 包含
compact
/日志清理等一系列后台功能 - 功能整合,DB功能封装
-
- 基于
Redis
的Resp
的数据交换协议 - 服务端入口
- 客户端命令行工具
- 优雅退出
-
Raft
协议(开发分支 beaker-v0.2.0)- 主节点选举
- 日志复制
- 快照安装
- 配置变更