Подтвердить что ты не робот

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

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

  • Наличие отдельного набора документов, которые содержат только изображение, сохраненное как двоичные данные, и, возможно, некоторые метаданные.
  • Или используя GridFS для хранения изображений.
4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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