Skip to content

Latest commit

 

History

History
78 lines (56 loc) · 2.24 KB

CH_README.md

File metadata and controls

78 lines (56 loc) · 2.24 KB

beaker

中文|english

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?;
}

如果你想安装servercli,使用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功能封装
  • 基于RedisResp的数据交换协议
  • 服务端入口
  • 客户端命令行工具
  • 优雅退出

分布式部分

  • Raft协议(开发分支 beaker-v0.2.0)
    • 主节点选举
    • 日志复制
    • 快照安装
    • 配置变更

参考与引用