Должен ли я использовать GridFS или двоичные данные для хранения и извлечения изображений из MongoDB?
Мне было интересно, что это лучше/быстрее:
- наличие отдельной коллекции документов, которые просто содержат изображение, сохраненное как двоичные данные, и, возможно, некоторые метаданные.
- или использование 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
Не забывайте, что вам, возможно, придется перевести данные в папку и обратно.
но чтобы быть уверенным, сделать тест производительности, который учитывает ваш шаблон использования.