【发布时间】:2012-07-11 15:27:03
【问题描述】:
我运行一个在 nodeJS + mongoDB 后端运行的网站。现在,我正在实现一个系统来存储一些需要在数据库中的图标(小图像文件)。
据我了解,不使用 GridFS 更有意义,因为它似乎是为大文件或大量文件量身定制的。由于我需要保存的每个文件都将远低于 BSON 最大文件大小,因此我应该能够将它们直接保存到常规文档中。
我有两个问题:
1) 我的推理正确吗?可以将图像文件保存在常规的 mongo 集合中,而不是使用 GridFS 吗?有什么我不应该考虑的吗?
2) 如果我的思维过程是健全的,我该怎么做呢?我可以执行以下操作吗:
//assume 'things' is a mongoDB collection created properly using node-mongodb-driver
fs.readFile(pathToIconImage, function(err,image){
things.insert({'image':image}, function(err,doc){
if(err) console.log('you have an error! ' + err);
});
});
我猜可能有更好的方法来做到这一点,因为 mongoDB 使用 BSON,在这里我试图在将文件发送到数据库之前将其保存为 JSON。我也不知道这段代码是否有效(没试过)。
更新 - 新问题
如果我在集合中有一个文档,其中保存了三条信息:1) 名称、2) 日期和 3) 图像文件(上面的图标),并且我想将此文档发送到客户端为了显示所有三个,这可能吗?如果没有,我想我需要使用 GridFS 并保存 fileID 来代替图像本身。想法/建议?
最好,感谢您的任何回复,
萨米
【问题讨论】:
-
“量身定制”没有任何意义。量身定制如何?使用 GridFS 执行此任务会出现什么问题?
-
我想我会按照这里的建议进行操作:mongodb.org/display/DOCS/When+to+use+GridFS
-
那里列出的任何案例是否真的适用于您?
-
我正在查看目前适用于我但将来不会使用的“少数小型静态文件”(何时不使用它)。我想你是对的。从长远来看,使用 GridFS 可能会更容易。但话虽如此,我仍然很好奇如何在没有网格系统的情况下将一个小文件放入 MongoDB。
-
GridFS 只是数据库中的两个 MongoDB 集合——一个用于文件元数据,一个用于文件的“块”(每个块为 1/4 MB)。