# GRDB **Repository Path**: Ivyevy/GRDB ## Basic Information - **Project Name**: GRDB - **Description**: A strongly consistent in-memory key-value database based on RAFT implementation - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-03 - **Last Updated**: 2026-01-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GRDB - Go Raft Database GRDB是一个基于Raft共识算法构建的分布式内存型键值数据库,其中Raft算法是本人通关了MIT 6.824课程Raft实验([Raft](./6.824/src/raft))后移植过来的,并在此基础上进行了扩展和优化。 ## 项目特性 ### 纯Go实现 - 完全使用Go语言开发 - 无需引入任何第三方框架 ### 核心功能 - **分布式共识**:基于Raft算法实现强一致性 - **内存存储**:内存型键值存储 - **持久化**:支持日志持久化和快照功能 - **线性一致性**:保证读写操作的线性一致性 ### 扩展功能 在MIT 6.824 Raft实现基础上,GRDB添加了以下高级特性: 1. **NOOP日志**:优化领导者选举后的日志同步 2. **单步法成员变更**:安全的集群成员动态变更 3. **分段日志**:将日志分段存储,提高I/O效率 4. **读操作线性一致性**:实现ReadIndex确保读操作的线性一致性,get set并发操作通过了[Porcupine](https://github.com/anishathalye/porcupine)工具验证 ### 数据库操作 **基础操作:** - `set ` - 设置键值对 - `get ` - 获取指定键的值 - `del ` - 删除键值对 - `setnx ` - 当键不存在时设置键值对 **过期时间管理:** - `setex ` - 设置键值对并指定过期时间 - `ttl ` - 获取键的剩余存活时间 - `expire ` - 设置键的过期时间戳 **查看操作:** - `keys` - 列出所有键 - `list` - 列出所有键值对 **集群管理:** - `leader` - 查看当前Leader信息 - `nodes` - 查看集群节点信息 - `addnode ` - 添加节点到集群 - `removenode ` - 从集群中移除节点 - `status` - 查看集群状态 **其他:** - `help` - 显示帮助信息 - `q` 或 `quit` - 退出客户端 ## 项目结构 ``` grdb/ ├── client/ # 客户端实现 ├── server/ # 服务端实现 │ ├── cluster/ # Raft集群相关 │ ├── config/ # 配置管理 │ └── logger/ # 运行日志 ├── go.mod # Go模块定义 └── README.md # 项目说明 ``` ## 快速开始 ### 环境要求 - Go 1.19+ ### 安装依赖(测试线性一致性) ```bash go mod tidy ``` ### 运行示例 ```bash # 启动服务端 go run <执行文件> 参数: - 节点ID - 配置文件路径 示例: cd server go run . node1 ../conf.json 启动第一个节点 go run . node2 ../conf.json 启动第二个节点 go run . node3 ../conf.json 启动第三个节点 # 运行客户端 go run <执行文件> 参数: - 配置文件路径 示例: cd client go run . ../conf.json 启动客户端 # 新增节点 1. 先增加一个配置文件 2. 复制当前集群中的节点信息,并添加新增节点的信息(参考addNode.json) 3. 启动新增节点 4. 在客户端执行 addnode 命令,添加新节点 # 移除节点 1. 在客户端执行 removenode 命令,移除节点 ``` ## 许可证 本项目采用MIT许可证。 ## 致谢 - MIT 6.824分布式系统课程 - Raft论文作者 - Porcupine线性一致性验证工具 --- **注意**:本项目主要用于学习和研究目的,不适合生产环境。