GridFS — изображения и эскизы продуктов — какая структура БД лучше?

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

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

В настоящее время я думаю хранить идентификаторы изображений, а также идентификаторы большого пальца (идентификаторы из 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'
}

ОБНОВЛЕНИЕ: поле «путь» в GridFS является «фальшивым», а не реальным путем. Просто быстрый способ найти все связанные файлы. Дешевле иметь 1 индексированное поле, чем несколько полей с составными индексами.


person Roman    schedule 11.05.2012    source источник


Ответы (1)


Если вы будете хранить изображения с GridFS в MongoDB, я бы выбрал первый.

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

В общем см. Хранение изображений в БД - да или нет? если вам действительно нужно хранить изображения в dbms.

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

person philnate    schedule 11.05.2012