2012-05-11 4 views
2

У меня есть сайт электронной коммерции, работающий на MongoDB + GridFS. Каждый продукт может содержать до 5 изображений. Каждое изображение имеет 3 миниатюры разных размеров.GridFS - изображения продуктов и миниатюры - какая лучшая структура базы данных?

Мне нужен совет по наилучшей структуре БД для этого.

В настоящее время я имею в виду для хранения идентификаторов изображения, а также идентификаторы накатанной (идентификаторы из GridFS) в каждом продукте:

{ 
    '_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' 
} 

UPDATE: "Путь" поле в GridFS является "подделка" путь, а не реальный. Просто быстрый способ найти все связанные файлы. Дешевле иметь 1 проиндексированное поле, чем несколько полей с составными индексами.

ответ

4

Если вы сохраните изображения с помощью GridFS в MongoDB, я бы пошел первым.

Вторая схема не кажется правильной. Я имею в виду, что GridFS должен хранить файлы, поэтому с идентификатором изображения вам не нужен какой-либо путь в этих документах. Если вы просто хотите сохранить путь к файлу, прямо вставьте его в свою основную коллекцию, поэтому вам не нужны эти накладные расходы в несколько бесполезной коллекции.

В целом, см. Storing Images in DB - Yea or Nay?, если вы действительно должны хранить свои изображения в dbms.

Кроме того, если вы сохраняете только путь, вам может понадобиться немного, чтобы никаких изменений в случае, если вы переходите на какой-либо CDN, чтобы получить изображения для клиента.

Смежные вопросы