chore: 清理仓库——移除本地配置/损坏文档/失真架构图,删除两处冗余分层 - #262
Conversation
.claude/settings.local.json 是 Claude Code 的每机本地配置(文件名中的 .local 即表明 其定位),随开发者机器而异,不应进入仓库。goroutine.prof 是一次 pprof 采样的产物。 .gitignore 相应地由 .claude/worktrees/ 放宽为整个 .claude/,并新增 *.prof。 根目录的 CLAUDE.md 不受影响(它在 .claude/ 之外,是随仓库分发的协作规范)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
这批文件无法按 UTF-8 解码——是 GBK 编码在迁移中未转换的残留,终端里显示为乱码 (如「使用指�?」)。内容同样已失效:全部指向 E:\Code\bandb 这个不存在的路径, 以及 cmd/server/server.go 这个不存在的文件。 cmd/ban-cli/README.md 150 行,PowerShell 用法 + 已删除的 run.bat raft/TEST_README.md 189 行 raft/README_TESTS.md 110 行 raft/TEST_REPORT.md 276 行,手写的测试报告 三份 raft 测试文档合计 575 行,且互相重叠。手写的测试报告在测试一改即过期, CI 与 `go test` 才是事实来源,不需要再维护一份人工副本。 同时删除 5 个 .bat 手工脚本:项目在 macOS 开发、CI 跑 Linux,其中 3 个同样是 GBK 残留;raft 下两个只是 `go test` 的包装,直接跑 go test 即可。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
architecture-diagram.md 画的是「MVCC 事务管理层」「事务管理器」「分配 ReadTS/WriteTS」 「快照视图」「TxnID」——这些在代码里出现 0 次,本项目没有任何 MVCC 或事务实现。 它描述的是一个不存在的系统,且与 README 中那张反映真实结构的架构图相冲突。 一张画错的架构图比没有架构图更糟:读者会据此去代码里找根本不存在的组件。README 的 架构图与实现一致,保留它即可。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
导学-BanDB.md、面经-BanDB.md、AGENTS.md 本是未跟踪文件,被我在「修正 Mata 拼写」那次 提交的 git add -A 中连带入库(该 commit 的说明只描述了拼写修正,并未提及这三个文件)。 此处从仓库移除但保留工作区副本,并加入 .gitignore 以免再次误入。 同类问题已发生三次,根因是本仓库中 git mv 会立即暂存重命名,git add -A 随之把无关的 未跟踪文件一并纳入。后续一律按显式路径暂存。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Engine 的 8 个方法在删掉无人使用的 apply 通道后已全部退化为一行转发(Put/Get/Delete/ Scan/SnapshotLive/Close/FlushToSSTable 均直接调用同名的 MemTable 方法),不承载任何 逻辑、不做任何适配,只是调用链上多出的一跳。KVServer 与压测代码改为直接持 *MemTable。 唯一需要调整的是命名:Engine.Scan 转发到的是 MemTable.ScanRange,调用点随之改名。 engine_test.go 一并改名为 memtable_engine_test.go。 顺带记录一处仍待处理的职责问题(本次不动):MemTable 自身持有 sst *SSTable,并负责 getFromSSTables / FlushToSSTable / CompactSSTable——它实际上就是整个 LSM 引擎,而不只是 一张内存表,名字与职责不符。理清它需要拆分类型,属独立改动。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
SDK 落地后,cmd/ban-cli 仍带着自己那份 224 行的帧编解码,是全仓第 4 份线格式实现 (另有 bannet/datapack.go 服务端侧、bannet/client.go 节点间、client/conn.go SDK)。 删除 cmd/ban-cli/client.go,两种模式统一走 SDK。 CLI 因此免费获得 SDK 的超时、有界重试与 ErrKeyNotFound:get 不存在的键不再报「读取 失败」,而是明确提示键不存在,并以独立退出码 3 返回,便于脚本判别。 顺带修两处既有缺陷: - 地址在命令行模式下硬编码为 localhost:8080,无法指定;现为 -addr 参数。 - usage 宣称 `client <addr>` 可进入交互模式,但 main 把「有位置参数」一律路由到命令 模式,该地址会被当成未知命令——这条文档中的用法从来无法执行。现按标准 flag 解析: 无位置参数进交互模式,有则按单条命令执行。 已对真实服务端验证两种模式:put/get/delete/scan 正常,键不存在返回退出码 3。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
🐯 BanGD 数据库内核评审整体风险:🟢 低 变更总结:本 PR 完成两类清理,本质是「重构所有权边界 + 收紧工程纪律」。 一、仓库清污:移除 二、代码分层瘦身:删除 改动不触及存储格式、WAL 记录格式或任何并发不变量,仅作结构性重构与仓库卫生,净减约 1400 行。
架构问题(共 2 项)
普通问题(共 2 项)
💡 [建议 · 错误处理]
本次评审消耗 token:共 286161 tokens(输入 269348,输出 4909,缓存命中 11904,缓存写入 0)|维度 [concurrency, memory, lock, storage, schema]|补充阅读周边文件 [client/client.go, storage/memtable.go, pkg/proto/scan.go, pkg/predicate/predicate.go]|对抗式复核 3 票/条,过滤疑似误报 0 条 |
两类清理:不该在仓库里的东西,和代码里的冗余分层。
一、不该在仓库里的东西
.claude/settings.local.json.local即其定位),随开发者机器而异goroutine.prof.batgo test的包装导学-BanDB.md、面经-BanDB.md、AGENTS.md.gitignore相应放宽为整个.claude/,并加*.prof与那三个个人文件。根目录CLAUDE.md不受影响(它在.claude/之外,是随仓库分发的协作规范)。需要交代的错误
那三个文件本是未跟踪的,被我在「修正 Mata 拼写」那次提交的
git add -A里连带入库,而且推上了 main —— 该 commit 的说明只写了拼写修正,完全没提这三个文件。同类问题在本会话中发生三次,前两次我在 push 前发现并重建了历史,这次没有。根因是本仓库里git mv会立即暂存重命名,git add -A随之把无关的未跟踪文件一并纳入。后续一律按显式路径暂存。此处从仓库移除但保留工作区副本。二、内容已失真的文档
判定标准是客观的,不是我的口味:这批文件无法按 UTF-8 解码——GBK 编码在迁移中未转换的残留,终端里显示为乱码(如「使用指�?」)。而且全部指向
E:\Code\bandb这个不存在的路径,以及cmd/server/server.go这个不存在的文件。三份 raft 测试文档合计 575 行且互相重叠。手写的测试报告在测试一改即过期,CI 与
go test才是事实来源。architecture-diagram.md单独说:它画的是「MVCC 事务管理层」「事务管理器」「分配 ReadTS/WriteTS」「快照视图」「TxnID」——这些在代码里出现 0 次,本项目没有任何 MVCC 或事务实现。一张画错的架构图比没有架构图更糟:读者会据此去代码里找根本不存在的组件。README 里那张与实现一致的图保留。docs/下 15 篇带日期的迭代记录全部保留——它们记的是「遇到什么问题、为何这么选」,不会过期。三、代码里的冗余分层
storage.Engine删除删掉无人使用的 apply 通道后,它的 8 个方法已全部退化为一行转发(
Put/Get/Delete/Scan/SnapshotLive/Close/FlushToSSTable都直接调同名的MemTable方法),不承载逻辑、不做适配,只是调用链上多出的一跳。KVServer与压测代码改为直接持*MemTable。顺带记录一处未处理的职责问题:
MemTable自身持有sst *SSTable并负责getFromSSTables/FlushToSSTable/CompactSSTable——它实际上就是整个 LSM 引擎,而不只是一张内存表,名字与职责不符。理清需要拆分类型,属独立改动。cmd/ban-cli改用 SDKCLI 仍带着自己 224 行的帧编解码,是全仓第 4 份线格式实现。删除后两种模式统一走 SDK,并因此免费获得超时、有界重试与
ErrKeyNotFound:get不存在的键不再报「读取失败」,而是明确提示并以退出码 3 返回,便于脚本判别。顺带修两处既有缺陷:
localhost:8080,无法指定 → 改为-addr。client <addr>进入交互模式,但main把「有位置参数」一律路由到命令模式,地址会被当成未知命令——这条文档里的用法从来无法执行。现按标准 flag 解析。验证
go build ./...(含-tags pprof)、go vet ./...、go test -race ./...、gofmt全绿。CLI 两种模式已对真实服务端实测:put/get/delete/scan 正常,键不存在返回退出码 3。净减约 1400 行。
🤖 Generated with Claude Code