GridFS - 产品图片和;缩略图 - 什么是最好的数据库结构?

时间:2012-05-11 11:16:51

标签: image mongodb thumbnails gridfs

我有一个处理MongoDB + GridFS的电子商务网站。 每个产品最多可包含5张图像。 每张图片都有3张不同大小的缩略图。

我需要一个关于最佳数据库结构的建议。

目前,我正在考虑在每个产品中存储图片ID和拇指ID(来自GridFS的ID):

{
   '_id': 1, 
   'title': 'Some Product', 
   'images': [
               {'id': '11', thumbs: {'small': '22', 'medium': '33'},
               {'id': '44', thumbs: {'small': '55', 'medium': '66'}  
             ]
}

或者在GridFS中存储路径会更好吗?

{
  '_id': '111',
  'filename': '1.jpg',
  'path': 'product/988/image/111/'
},
{
  '_id': '222',
  'filename': '1.jpg',
  'path': 'product/988/image/111/thumbnail_small'
},
{
  '_id': '333',
  'filename': '1.jpg',
  'path': 'product/988/image/111/thumbnail_large'
}

更新:GridFS中的“路径”字段是“虚假”路径,而不是真实路径。只是一种快速查找所有相关文件的方法。拥有1个索引字段比使用复合索引的几个字段更便宜。

1 个答案:

答案 0 :(得分:4)

如果您将使用GridFS在MongoDB中存储图像,我会选择第一个。

第二个模式似乎不正确。我的意思是GridFS应该存储文件,所以使用图像的id你不需要在这些文件中的任何路径。如果您只是想存储文件的路径,请直接将其嵌入到主要集合中,这样您就不需要这种无用集合的开销。

一般情况下,如果您确实应将图像存储在dbms中,请参阅Storing Images in DB - Yea or Nay?

此外,如果您只保存路径,则可能需要很少甚至不需要更改,以防您切换到某个CDN以将图像传送给客户。