面试题答案
一键面试基本数据结构
- chunks集合:
- 用于存储文件的实际数据块。每个数据块文档包含以下重要字段:
files_id
:关联到files
集合中对应文件的_id
,用于标识该数据块属于哪个文件。n
:数据块的编号,用于确定数据块在文件中的顺序。data
:实际存储的数据块内容,以二进制大对象(BSON Binary)形式存储。
- 用于存储文件的实际数据块。每个数据块文档包含以下重要字段:
- files集合:
- 存储文件的元数据信息。每个文件元数据文档包含以下常见字段:
_id
:文件的唯一标识符。filename
:原始文件名。contentType
:文件的MIME类型,用于标识文件类型,如application/json
、image/jpeg
等。length
:文件的总大小(以字节为单位)。- 还可以包含其他自定义的元数据字段,如文件创建时间、作者等。
- 存储文件的元数据信息。每个文件元数据文档包含以下常见字段:
文件写入流程
- 分割文件:客户端将待写入的文件分割成多个数据块,通常每个数据块大小为256KB(可配置)。
- 创建文件元数据:在
files
集合中插入一个新文档,记录文件的元数据信息,如文件名、文件大小、MIME类型等。此时会生成一个唯一的_id
。 - 写入数据块:将分割后的每个数据块依次插入到
chunks
集合中。每个数据块文档的files_id
字段设置为files
集合中对应文件的_id
,n
字段按顺序编号,data
字段存储实际的数据块内容。 - 确认写入:客户端等待所有数据块成功写入
chunks
集合以及文件元数据成功写入files
集合后,完成文件写入操作。
文件读取流程
- 查询文件元数据:客户端通过文件的
_id
或其他元数据信息在files
集合中查询目标文件的元数据文档,获取文件的总大小、数据块数量等信息。 - 获取数据块:根据
files
集合中文件元数据文档的_id
,在chunks
集合中按n
字段从小到大的顺序查询所有对应的数据块。 - 合并数据块:客户端将获取到的数据块按照
n
字段的顺序依次合并,重新构建出完整的文件数据。 - 完成读取:客户端获取到完整的文件数据后,完成文件读取操作,可以对文件进行进一步处理,如显示图片、解析文档等。