MongoDB GridFS

GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。

GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。

GridFS 可以更好的存储大于16M的文件。

GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。

GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。

每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。

以下是简单的 fs.files 集合文档:

{
   "filename": "test.txt",
   "chunkSize": NumberInt(261120),
   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
   "md5": "7b762939321e146569b07f72c62cca4f",
   "length": NumberInt(646)
}

以下是简单的 fs.chunks 集合文档:

{
   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
   "n": NumberInt(0),
   "data": "Mongo Binary Data"
}

GridFS 添加文件

现在我们使用 GridFS 的 put 命令来存储 mp3 文件。 调用 MongoDB 安装目录下bin的 mongofiles.exe工具。

打开命令提示符,进入到MongoDB的安装目录的bin目录中,找到mongofiles.exe,并输入下面的代码:

>mongofiles.exe -d gridfs put song.mp3

-d gridfs 指定存储文件的数据库名称,如果不存在该数据库,MongoDB会自动创建。如果不存在该数据库,MongoDB会自动创建。Song.mp3 是音频文件名。

使用以下命令来查看数据库中文件的文档:

>db.fs.files.find()

以上命令执行后返回以下文档数据:

{
   _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
   filename: "song.mp3", 
   chunkSize: 261120, 
   uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
   length: 10401959 
}

我们可以看到 fs.chunks 集合中所有的区块,以下我们得到了文件的 _id 值,我们可以根据这个 _id 获取区块(chunk)的数据:

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

以上实例中,查询返回了 40 个文档的数据,意味着mp3文件被存储在40个区块中。

### MongoDB GridFS 安装指南 MongoDB GridFS 是一种用于存储和检索超过 BSON 文档大小限制(16 MB)的文件的规范。以下是一个综合的安装与配置指南,涵盖不同环境下的操作。 #### 1. 系统要求 在开始之前,请确保已安装 MongoDB 数据库服务,并且其版本支持 GridFS 功能。可以通过以下命令检查 MongoDB 的版本: ```bash mongod --version ``` 确保版本不低于支持 GridFS 的最低要求[^2]。 #### 2. 使用 gridfs_fuse 挂载 GridFS 为了将 GridFS 文件系统挂载到本地目录,可以使用 `gridfs_fuse` 工具。以下是具体步骤: - **安装依赖**:确保系统已安装 FUSE 支持。 ```bash sudo apt-get install fuse ``` - **下载并安装 gridfs_fuse**:根据官方文档或第三方实现进行安装。 - **挂载命令**: ```bash gridfs_fuse \ --mongodb-uri="mongodb://127.0.0.1:27017/" \ --database="your_database_name" \ --mount-point="/mnt/gridfs_fuse" ``` 此命令将指定的 MongoDB 数据库中的 GridFS 文件挂载到 `/mnt/gridfs_fuse` 目录中[^1]。 #### 3. PHP 环境下的 GridFS 配置 如果需要在 PHP 环境中使用 GridFS,可以参考以下步骤: - **安装 MongoDB PHP 扩展**: 下载最新版本的 PHP MongoDB 扩展源码,并进行编译安装。例如: ```bash wget http://pecl.php.net/get/mongo-1.2.12.tgz tar -xzf mongo-1.2.12.tgz cd mongo-1.2.12 phpize ./configure make sudo make install ``` - **启用扩展**:编辑 `php.ini` 文件,添加以下内容: ```ini extension=mongo.so ``` - **测试连接**:编写一个简单的 PHP 脚本来验证 GridFS 是否正常工作。 ```php <?php $client = new MongoClient("mongodb://127.0.0.1:27017/"); $db = $client->selectDB("your_database_name"); $gridfs = $db->getGridFS(); // 插入文件 $file_id = $gridfs->storeFile("/path/to/local/file"); // 获取文件 $file = $gridfs->find_one(array("_id" => $file_id)); echo $file->getBytes(); ?> ``` 上述代码展示了如何通过 PHP 将文件存储到 GridFS 中,并从中检索文件[^3]。 #### 4. Java 环境下的 GridFS 操作 对于 Java 开发者,可以利用 MongoDB 的 Java 驱动程序来操作 GridFS: - **Maven 依赖**: 在项目的 `pom.xml` 文件中添加以下依赖项: ```xml <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.0</version> </dependency> ``` - **示例代码**: ```java import com.mongodb.MongoClient; import com.mongodb.gridfs.GridFS; import com.mongodb.gridfs.GridFSInputFile; public class GridFSTest { public static void main(String[] args) { MongoClient client = new MongoClient("127.0.0.1", 27017); GridFS gridFS = new GridFS(client.getDB("your_database_name")); // 插入文件 GridFSInputFile file = gridFS.createFile(new File("/path/to/local/file")); file.save(); // 查询文件 InputStream inputStream = gridFS.find(new BasicDBObject()).next().getInputStream(); // 处理输入流... } } ``` 此代码片段展示了如何通过 Java 驱动程序上传和检索文件[^4]。 #### 5. 其他注意事项 - **性能优化**:对于大规模文件存储,建议对 MongoDB 进行适当的索引优化和分片配置。 - **安全性**:确保 MongoDB 实例已启用身份验证,并限制外部访问。 - **备份策略**:定期备份包含 GridFS 数据的数据库以防止数据丢失。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值