MST

星途 面试题库

面试题:MongoDB GridFS文件存储的基本数据结构及读写流程

请阐述MongoDB GridFS文件存储所涉及的基本数据结构,并描述文件写入和读取的大致流程。
45.4万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

基本数据结构

  1. chunks集合
    • 用于存储文件的实际数据块。每个数据块文档包含以下重要字段:
      • files_id:关联到files集合中对应文件的_id,用于标识该数据块属于哪个文件。
      • n:数据块的编号,用于确定数据块在文件中的顺序。
      • data:实际存储的数据块内容,以二进制大对象(BSON Binary)形式存储。
  2. files集合
    • 存储文件的元数据信息。每个文件元数据文档包含以下常见字段:
      • _id:文件的唯一标识符。
      • filename:原始文件名。
      • contentType:文件的MIME类型,用于标识文件类型,如application/jsonimage/jpeg等。
      • length:文件的总大小(以字节为单位)。
      • 还可以包含其他自定义的元数据字段,如文件创建时间、作者等。

文件写入流程

  1. 分割文件:客户端将待写入的文件分割成多个数据块,通常每个数据块大小为256KB(可配置)。
  2. 创建文件元数据:在files集合中插入一个新文档,记录文件的元数据信息,如文件名、文件大小、MIME类型等。此时会生成一个唯一的_id
  3. 写入数据块:将分割后的每个数据块依次插入到chunks集合中。每个数据块文档的files_id字段设置为files集合中对应文件的_idn字段按顺序编号,data字段存储实际的数据块内容。
  4. 确认写入:客户端等待所有数据块成功写入chunks集合以及文件元数据成功写入files集合后,完成文件写入操作。

文件读取流程

  1. 查询文件元数据:客户端通过文件的_id或其他元数据信息在files集合中查询目标文件的元数据文档,获取文件的总大小、数据块数量等信息。
  2. 获取数据块:根据files集合中文件元数据文档的_id,在chunks集合中按n字段从小到大的顺序查询所有对应的数据块。
  3. 合并数据块:客户端将获取到的数据块按照n字段的顺序依次合并,重新构建出完整的文件数据。
  4. 完成读取:客户端获取到完整的文件数据后,完成文件读取操作,可以对文件进行进一步处理,如显示图片、解析文档等。