我正在建设一个网站,用户可以上传图片。每个用户使用的最大空间也受到限制。
我有两个想法:
1. 使用类似于mongoDB的NoSQL数据库GridFS来存储图像。 2. 将图像存储在文件系统中,并在数据库中存储路径。
上述哪种方法更好?为什么呢?
我有两个想法:
1. 使用类似于mongoDB的NoSQL数据库GridFS来存储图像。 2. 将图像存储在文件系统中,并在数据库中存储路径。
上述哪种方法更好?为什么呢?
唉,为什么每个人都跳到GridFS呢?
根据图像的大小和确切的用例,我建议将图像直接存储在数据库中(而不是通过GridFS)。这是原因:
文件系统
af/2c/af2c2ab3852df91.jpg
,其中文件夹 af
和 2c
是从文件名推断出来的(文件名本身可能是内容的哈希值,用于去重)。GridFS
GridFS 专门用于存储大型文件,并以类似于文件系统的方式存储文件。这带来了一些缺点:
fs.file
和一个fs.chunk
文档。对于大型文件,chunking 是绝对必需的,但如果您的文件平均值低于 256k,则实际上没有真正的 chunking(默认 chunk 大小为 256k)。因此,在 GridFS 中存储小文件时,您会得到开销而没有好处。这也需要两个查询而不是一个。如果您在为摄影师运营一个网站,他们可以上传10MB的RAW文件或大型JPEG文件,则情况可能会有所不同。在这种情况下,GridFS可能是一个不错的选择。对于存储用户图像、缩略图等,我会简单地将图像放在自己的文档中。