Быстрее ли загружать и загружать изображения в MongoDB, чем на диск? - PullRequest
11 голосов
/ 30 июня 2011

Скажем, мы хотим разработать фото-сайт.

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

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

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

Ответы [ 4 ]

8 голосов
/ 30 июня 2011

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

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

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

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

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

3 голосов
/ 15 февраля 2012

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

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

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

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

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

3 голосов
/ 30 июня 2011

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

2 голосов
/ 30 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...