Должен ли я использовать GridFS или двоичные данные для хранения и извлечения изображений из MongoDB?

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

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

4 ответов


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

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

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

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

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

надеюсь, что это помогает.


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

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


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

отказ от ответственности: я являюсь сотрудником MongoDB.


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

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

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