我正在使用mongodb,我想在我的服务器中存储一些缩略图。什么是最好的?使用GridFS或将这些图像转换为base64并将它们直接存储在文档中。
答案 0 :(得分:8)
一如既往有一些优势:
<强>优点:强>
<强>中性:强>
<强>缺点:强>
使用MongoDB和NoSQL可以了解您的用例!
如果您的文档中的批次共享相同的图像,则应使用GridFS并仅提供指向这些文件的链接,因为 1。共享数据的空间效率更高且 2。 客户端可以缓存图像请求,只需检索一次。
如果您的客户始终需要缩略图,您可以考虑在响应中将文件嵌入base64。如果 1。图像不在文档之间共享和/或 2。图像经常更改并且缓存无用/不可能,这一点尤其好。
Base64当然意味着线路上的流量更多,因为它需要8位才能传输6位。即75%的效率。这当然只影响客户端 - 服务器通信,因为在MongoDB中,您始终可以将数据存储为二进制字段。
您是否更喜欢数据库请求(=使用GridFS)?或者更大的数据/文档大小(=嵌入式)?
我们做了什么:
我们使用嵌入式缩略图,即使我们可能有重复的图像。在服务器上激活gzip压缩后,服务器 - 客户端传输大小不再重要。但如前所述,这是一个权衡:现在我们有更少的客户端请求和更少的数据库请求,但由于嵌入使得缓存图像变得不可能,我们现在有了更多的数据。
<强>结论:强>
没有一种尺寸适合所有解决方案。
答案 1 :(得分:3)
这实际上取决于您的服务器端技术和个人偏好。 10gen建议您使用文档,除非您存储的文件大于文档限制(16MB)。鉴于您使用的语言,我建议您做任何更容易的事情。如果您在遵循文档后有其他文档要建模,否则请给gridFS一个镜头。
答案 2 :(得分:0)
我建议您使用GridFS。使用GridFS,您可以利用MongoDB REST API。因此,使用MongoDB API检索文档不会有任何过热。 REST API将完成所有艰苦工作并节省您的时间。