1. 首页 > MongoDB教程 > 正文

MongoDB教程FG063-MongoDB文件存储GridFS实战

本文主要介绍MongoDB数据库的文件存储功能GridFS,包括文件的上传、下载和管理等核心操作。风哥教程参考MongoDB官方文档GridFS相关章节。

目录大纲

Part01-基础概念与理论知识

Part02-生产环境规划与建议

Part03-生产环境项目实施方案

Part04-生产案例与实战讲解

Part05-风哥经验总结与分享

Part01-基础概念与理论知识

1.1 GridFS概述

GridFS是MongoDB提供的一种文件存储机制,用于存储和检索超过BSON文档大小限制(16MB)的文件。GridFS将大文件分割成多个小的块(chunks)进行存储,并通过元数据(metadata)来管理这些块。

GridFS适用于存储大型文件,如图片、视频、音频、文档等,特别适合需要在MongoDB中统一管理数据和文件的应用场景。学习交流加群风哥微信: itpux-com

1.2 GridFS工作原理

GridFS的工作原理:

  • 将文件分割成256KB的块(chunks)
  • 将每个块存储在chunks集合中
  • 将文件的元数据存储在files集合中
  • 通过文件ID关联chunks和files集合

当需要读取文件时,GridFS会根据文件ID从chunks集合中检索所有相关的块,并重新组装成完整的文件。更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 GridFS使用场景

GridFS适用于以下场景:

  • 存储超过16MB的大文件
  • 需要在MongoDB中统一管理数据和文件
  • 需要对文件进行元数据管理和查询
  • 需要支持文件的部分读取

风哥提示:对于小型文件(小于16MB),直接存储在文档中可能更高效。

2.2 存储规划

存储规划包括:

  • 文件大小和数量估计
  • 存储容量规划
  • 索引策略
  • 备份策略

更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 GridFS配置

GridFS不需要特殊配置,它使用MongoDB的默认配置。但可以通过以下方式优化:

# 修改MongoDB配置文件
vi /mongodb/app/mongod.conf

storage:
dbPath: /mongodb/fgdata
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 4
# 根据服务器内存调整

3.2 文件操作命令

MongoDB提供了mongofiles工具来操作GridFS:

# 查看mongofiles帮助
/mongodb/app/bin/mongofiles –help

Part04-生产案例与实战讲解

4.1 文件上传实战

上传文件到GridFS:

# 创建测试文件
echo “Hello GridFS” > test.txt

# 上传文件
/mongodb/app/bin/mongofiles –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb put test.txt

# 输出日志
2026-04-08T10:00:00Z connected to: mongodb://192.168.1.100:27017/
2026-04-08T10:00:00Z added file: test.txt

上传大文件:

# 创建大文件(100MB)
dd if=/dev/zero of=large_file.bin bs=1M count=100

# 上传大文件
/mongodb/app/bin/mongofiles –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb put large_file.bin

# 输出日志
2026-04-08T10:05:00Z connected to: mongodb://192.168.1.100:27017/
2026-04-08T10:05:10Z added file: large_file.bin

from MongoDB视频:www.itpux.com

4.2 文件下载与管理实战

列出GridFS中的文件:

# 列出文件
/mongodb/app/bin/mongofiles –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb list

# 输出日志
2026-04-08T10:10:00Z connected to: mongodb://192.168.1.100:27017/
test.txt 12
large_file.bin 104857600

下载文件:

# 下载文件
/mongodb/app/bin/mongofiles –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb get test.txt

# 输出日志
2026-04-08T10:15:00Z connected to: mongodb://192.168.1.100:27017/
wrote to: test.txt

删除文件:

# 删除文件
/mongodb/app/bin/mongofiles –host 192.168.1.100 –port 27017 –username fgedu –password fgedu123 –authenticationDatabase admin –db fgedudb delete test.txt

# 输出日志
2026-04-08T10:20:00Z connected to: mongodb://192.168.1.100:27017/
deleted file: test.txt

使用MongoDB Shell操作GridFS:

# 连接MongoDB
/mongodb/app/bin/mongosh –host 192.168.1.100 –port 27017 -u fgedu -p fgedu123 –authenticationDatabase admin

# 切换到目标数据库
use fgedudb

# 查看GridFS文件
db.fs.files.find()

# 输出日志
[
{
_id: ObjectId(“60a7b8c9d0e1f2a3b4c5d6e7”),
length: NumberLong(104857600),
chunkSize: NumberLong(262144),
uploadDate: ISODate(“2026-04-08T10:05:00Z”),
filename: “large_file.bin”,
md5: “d41d8cd98f00b204e9800998ecf8427e”
}
]

风哥提示:GridFS的files集合存储文件元数据,chunks集合存储文件数据块。

Part05-风哥经验总结与分享

5.1 GridFS最佳实践

风哥建议的GridFS最佳实践:

  • 对于小于16MB的文件,考虑直接存储在文档中
  • 为files集合的常用查询字段创建索引
  • 使用合适的元数据字段,便于文件查询和管理
  • 定期清理不需要的文件,避免存储空间浪费
  • 对于大量文件的场景,考虑使用分片集群

学习交流加群风哥QQ113257174

5.2 性能优化建议

GridFS的性能优化建议:

  • 使用SSD存储提高读写性能
  • 调整WiredTiger缓存大小,提高文件读写速度
  • 对于频繁访问的文件,考虑使用缓存
  • 合理设置chunkSize,平衡存储效率和读写性能
  • 监控GridFS的性能,及时调整配置

更多视频教程www.fgedu.net.cn

注意事项

  • GridFS不适合存储非常小的文件(小于1KB),因为元数据开销可能超过文件本身
  • GridFS的读取性能可能不如直接文件系统,适合对文件访问速度要求不高的场景
  • 备份GridFS数据时,需要同时备份files和chunks集合
  • GridFS的文件大小受限于MongoDB的存储容量,理论上可以存储非常大的文件
  • 定期检查GridFS的存储空间使用情况,避免磁盘空间不足

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息