1.4.5.2
This commit is contained in:
87
EdgeNode/internal/utils/bfs/DESIGN.md
Normal file
87
EdgeNode/internal/utils/bfs/DESIGN.md
Normal 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的时候记录空闲blocks:freeBlocks
|
||||
* 再次被使用的时候减去空闲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 ], ...
|
||||
~~~
|
||||
|
||||
Reference in New Issue
Block a user