Каков наилучший способ хранения ссылок на файл gridFS в документе? - PullRequest
5 голосов
/ 24 января 2012

Я использую MongoDB для хранения профилей пользователей, и теперь я хочу использовать GridFS для хранения изображений для каждого профиля.

Два способа сравнения двух документов:

A) Сохранить ссылку на идентификатор файла в поле пользователя image:

User: 
{
  "_id": ObjectId('[user_id here]'),
  "username": 'myusername',
  "image": ObjectId('[file_id here]')
}

B) Сохранить ссылку на пользователя в метаданных файла:

File metadata: 
{
  "user_id": ObjectId('[user_id here]')
}

Я знаю, что во многом это зависит от меня и зависит от особенностей приложения (оно будет мобильным, если это поможет), но мне просто интересно, есть ли какая-либо универсальная выгода сделать это одним способом или другой?

1 Ответ

3 голосов
/ 25 января 2012

Ответ здесь действительно зависит от модели использования вашего приложения.Мое предположение (не стесняйтесь меня поправлять) заключается в том, что наиболее вероятный шаблон выглядит примерно так:

Поиск пользователя -> Найти пользователя -> Просмотреть профиль (получить изображение)

СВ этом обобщенном сценарии использования (для метода А вы находите документ пользователя для отображения профиля), который содержит идентификатор объекта изображения, и вы впоследствии извлекаете файл с использованием этого идентификатора (2 основные операции, и все готово).

Примечание: фактическое извлечение файла из GridFS Я рассматриваю как одну логическую операцию, на самом деле задействовано несколько операций, но большинство драйверов / API все равно затеняют это.

При использовании метода B вам нужно будет найти пользовательский документ, затем выполнить другой запрос, чтобы найти соответствующий user_id в коллекции метаданных файла, а затем перейти к извлечению файла.По моим подсчетам, это три операции (дополнительная находка, которую вы не имеете с методом A).

Имеет ли это смысл?

Конечно, если мое предположение неверно и ваше заявление(например) на основе изображения, тогда ваш шаблон запроса может дать другой ответ.

...