This commit is contained in:
unknown
2026-02-04 20:27:13 +08:00
commit 3b042d1dad
9410 changed files with 1488147 additions and 0 deletions

View File

@@ -0,0 +1,87 @@
# BFS设计
## TODO
* block对指定内容可以压缩比如text/html, text/plain
* block offset信息可以自动合并
* 实现bfs/下的所有TODO
* 系统退出(quit/terminate/kill)时自动关闭文件
* compact的时候同时compact .b和.m两个文件
* 实现对可缓存文件尺寸的限制
* 提前为文件扩展出空间: mFile, bFile
* FileReader可以重用使用完之后放入Pool但要考虑到数据可能已经变更
* 读的时候不允许修改相应区域
* 在compact的时候尤其注意不修改正在Read的区域
* 记录写入和读取速度,然后下次启动的时候根据写入和读取速度调整相关参数
* 可以实现缓存数据加密功能
* 校验mFile可以在文件末尾写入一个特殊标记比如$$$END$$$,下次读取的时候检查此标记是否仍然存在?可能导致写入性能较低
* IMPORTANT
* 实现空余空间重复利用:需要保证此块区域没有正在被读
* 策略单个文件内容写入时先写入最大的Gap写满之后再写入到尾部防止太过零碎
* delete file的时候记录空闲blocksfreeBlocks
* 再次被使用的时候减去空闲blocks
* 实现bFile和mFile的compact、定时器
* bFile和mFile的corruption检测
* 增加End Block
* 增加 openWriter options
* 增加 opnReader options
* 在 MetaFile 中实现 HeaderBlocks和BodyBlocks 合并操作
* 考虑 BlocksFile.Close()中是否要sync()还是简单的close即可这需要corruption检测支持
* fs.BFilesMap分区管理减少锁
* 思考把打开BFile和关闭BFile移出锁
* 完全避免 check status failed: the file closed
* 增加重试功能?
* limiter使用fsutils.Limiter
## 参考文档
* (CockroachDB's Storage Layer)[https://www.cockroachlabs.com/docs/stable/architecture/storage-layer]
## 设计目标
1亿个文件20TiB文件内容。
## 目录结构
~~~
00/
a.b - 文件内容
a.m - 元数据
01/
...
~~~
## 数据结构
文件内容:
~~~
block1, block2, ...
~~~
元数据:
~~~
hash
modifiedAt
expiresAt
status
fileSize
headerSize
bodySize
[header blocks info]
[body blocks info]
~~~
元数据要点:
* 单个文件可以放入512个文件
block info:
~~~
[fromOffset1, toOffset1 ], [fromOffset2, toOffset2 ], ...
~~~