我有一个处理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个索引字段比使用复合索引的几个字段更便宜。
答案 0 :(得分:4)
如果您将使用GridFS在MongoDB中存储图像,我会选择第一个。
第二个模式似乎不正确。我的意思是GridFS应该存储文件,所以使用图像的id你不需要在这些文件中的任何路径。如果您只是想存储文件的路径,请直接将其嵌入到主要集合中,这样您就不需要这种无用集合的开销。
一般情况下,如果您确实应将图像存储在dbms中,请参阅Storing Images in DB - Yea or Nay?。
此外,如果您只保存路径,则可能需要很少甚至不需要更改,以防您切换到某个CDN以将图像传送给客户。