FastDFS如何做到无文件索引
Posted Huazie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastDFS如何做到无文件索引相关的知识,希望对你有一定的参考价值。
FastDFS如何做到无文件索引
本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号。
1. 文件ID
FastDFS 不需要保存文件索引信息,是因为其精巧的 文件ID 设计。
上传文件时,文件ID 由 storage server 生成并返回给调用方(client),返回的 文件ID 中包含了 组名 和 文件名,调用方将 文件ID 保存到数据库中作为访问该文件的凭据。
文件上传流程示意图如下:
client 拿着 文件ID 访问文件时,会先询问 tracker server,tracker server 根据组名返回该组可用的 storage server,然后 client 带着 文件ID 直接向该 storage server 发送请求,storage server 可以根据该 文件ID 直接定位到文件。
文件下载流程示意图如下:
FastDFS 生成的一个 文件ID 示例:
磁盘部分 M后面的两位数字,表示基于0的磁盘序号。
文件名(不含后缀名)采用 Base64 编码,包含如下 5 个字段(每个字段均为 4 字节整数):
-
源storage server ID 或 IP地址
-
文件创建时间戳
-
文件大小
-
文件内容 CRC32 校验码
-
随机数
引入随机数的目的是防止生成重名文件。
如果采用了合并存储,生成的 文件ID 将变长,文件名后面多了 16 个字节。
这部分同样采用 Base64 编码,包含如下 3 个字段(每个字段均为 4 字节整数):
-
存放到的 trunk file ID
-
文件偏移量(offset)
-
占用的空间大小
根据前两个字段,可以知道文件存放的 trunk file 及偏移位置。
FastDFS 不需要文件索引,省掉了传统的 name server 角色,使得 FastDFS 更加简洁高效。
以上是关于FastDFS如何做到无文件索引的主要内容,如果未能解决你的问题,请参考以下文章