Быстрее загружать и загружать изображения в MongoDB, чем на диске

Скажем, мы хотим создать сайт для фотографий.

Быстрее загружать или загружать изображения в MongoDB или из него, чем хранить или загружать изображения с диска... Так как mongoDB может сохранять изображения и файлы в кусках и сохранять метаданные.

Итак, для веб-сайта для фотосъемки было бы лучше (быстрее) хранить изображения на mongodb или на типичном жестком диске сервера. и др.

im думает об использовании php, codeigniter btw, если это изменяет проблемы производительности в отношении вопроса.

Ответ 1

Легкие веб-серверы (lighttpd, nginx) выполняют довольно хорошую работу по обслуживанию контента из файловой системы. Поскольку ОС работает как слой кэширования, они обычно служат для хранения содержимого из памяти очень быстро.

Если вы хотите показывать изображения с mongodb, веб-сервер должен запускать своего рода script (python, php, ruby ​​... конечно, FCGI, вы не можете запускать новый процесс для каждого изображения), который должен получать данные от mongodb каждый раз, когда запрашивается изображение. Так что это будет медленно? Преимуществами являются автоматическая репликация и переход на другой ресурс при использовании наборов реплик. Если вам это нужно и достаточно умны, чтобы знать, чтобы достичь этого с помощью FS, то перейдите к этому варианту... Если вам нужна очень быстрая реализация, надежная, то mongodb может быть более быстрым способом сделать это. Но если ваш сайт будет популярен рано или поздно, вам нужно переключиться на реализацию FS.

BTW: вы можете смешивать эти два подхода, хранить изображение в mongodb, чтобы получить мгновенную надежность, а затем повторить его в FS нескольких серверов, чтобы получить скорость.

Некоторые результаты тестирования.

О, еще одна вещь. Сочетание метаданных с изображением кажется приятным до тех пор, пока вы не поймете сгенерированный HTML, и загрузка изображения будет двумя отдельными HTTP-запросами, поэтому вам нужно дважды запросить mongo, один раз для метаданных и один раз для изображения.

Ответ 3

Несколько тестов показали, что MongoDB примерно в 6 раз медленнее для хранения файлов (через GridFS) по сравнению с обычной старой файловой системой. (Один сравнивает apache, nginx и mongo)

Тем не менее, есть серьезные причины использовать MongoDB для хранения файлов, несмотря на то, что он медленнее - # 1 бесплатная резервная копия из встроенного в Mongo sharding/replication. Это ОГРОМНАЯ экономия времени. # 2 легкость администрирования, хранение метаданных, отсутствие необходимости беспокоиться о каталогах, разрешениях и т.д. Кроме того, ОГРОМНАЯ экономия времени.

Наш фоторолик был реализован несколько лет назад в огромном куске спагетти-кода, который делал всевозможные вещи (проверяя или создавая пользовательский каталог, проверяя или создавая даты, проверяем конфликт имен, устанавливаем perms) и целое другой беспорядок сделал резервные копии.

Мы недавно все изменили к Монго. По нашему опыту, Mongo немного медленнее (он может быть в 6 раз медленнее, но он не чувствует себя в 6 раз медленнее), и так или иначе - и что? Все эти спагетти выходят из окна, а новый код Mongo + намного меньше, проще и логичнее. Никогда не возвращайтесь в файловую систему.

http://www.lightcubesolutions.com/blog/?p=209

Ответ 4

Вы определенно не хотите загружать изображения непосредственно из MongoDB. Даже переход через GridFS будет (немного) медленнее, чем из простого файла на диске. Вы также не должны делать это с диска. Ни один из вариантов не подходит для доставки изображения с высокой пропускной способностью. Вам всегда потребуется серверный уровень кеширования для статического контента между вашим источником/источником (будь то mongo или файловая система) и вашими пользователями.

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