Files
waf-platform/EdgeNode/internal/utils/bfs/DESIGN.md
2026-02-04 20:27:13 +08:00

88 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 ], ...
~~~