Должен ли я использовать GridFS или двоичные данные для хранения и получения изображений из MongoDB? - PullRequest
12 голосов
/ 18 октября 2011

Мне было интересно, что лучше / быстрее :

  1. Имеет отдельную коллекцию документов, которые просто содержат изображение, сохраненное в виде двоичных данных, и, возможно, некоторые метаданные.
  2. Или используя GridFS для хранения изображений.

Ответы [ 4 ]

20 голосов
/ 19 октября 2011

Если ваши изображения маленькие, вы можете сохранить их в виде двоичных данных в документах вашей коллекции. Просто учтите, что вы будете получать их каждый раз, когда будете запрашивать документ (если только вы не исключите поле «изображение» из ваших запросов).

Однако, если ваши изображения больше, я бы использовал GridFS. GridFS имеет некоторые функции, которые делают его очень хорошим в обработке изображений, которые вы должны учитывать:

  • Для больших изображений, когда они хранятся в GridF, они будут разбиты на куски, и вы сможете хранить очень большие файлы. Если вы пытаетесь сохранить изображения в своем документе, вы ограничены максимальным размером документа в 16 МБ и занимает место, которое необходимо использовать для фактического документа.
  • Вы можете добавлять метаданные к самому изображению и выполнять запросы к этим атрибутам, как если бы вы делали это из обычного документа в коллекции. Так что GridFS так же хорош, как документ для метаданных об изображении.
  • Мне действительно нравится, что я получаю хэш MD5, рассчитанный на изображениях. (Это очень полезно для некоторых моих дел).
  • Храня изображения в GridFS, вы сохраняете предварительную обработку изображения в двоичном формате (не большое дело, но удобство GridFS)

С точки зрения производительности чтение / запись на обычном документе не должно отличаться от работы на GridFS. Я бы не стал считать производительность отличительной чертой при выборе любого из них.

Моя личная рекомендация - использовать GridFS, но вам нужно проанализировать ее для конкретного случая использования.

Надеюсь, это поможет.

3 голосов
/ 18 октября 2011

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

Например, в одном из моих проектов я храню фотографии профиля пользователя вместе с именами пользователей, типом файла и датой загрузки.

2 голосов
/ 23 октября 2017

Я написал пост в блоге, в котором рассматриваются компромиссы хранения двоичных данных в MongoDB и использования GridFS.См .: https://alexmarquardt.com/2017/03/02/trade-offs-to-consider-when-storing-binary-data-in-mongodb/

Отказ от ответственности: Я сотрудник MongoDB.

1 голос
/ 18 октября 2011

GridFS разработана для эффективной обработки файлов. http://www.mongodb.org/display/DOCS/When+to+use+GridFS

Не забывайте, что вам, возможно, придется перевести данные в файл и обратно.

Но чтобы быть уверенным, сделайте тест производительности, который учитывает ваш шаблон использования.

...