Наше приложение будет служить большому количеству маленьких, изображения размера миниатюры (о 6-12KB в размере) через HTTP. Меня попросили заняться расследованиями, является ли использование хранилища данных NoSQL эффективным решением для хранения данных. Идеально, мы хотели бы, чтобы наше хранилище данных было отказом-toerant и распределенный.
Действительно ли это - хорошая идея сохранить блобы в хранилищах NoSQL, и какой хорош для него? Кроме того, действительно ли NoSQL является хорошим решением для нашей проблемы, или мы были бы лучше обслужены, храня изображения в файловой системе и служа им непосредственно от веб-сервера (как в стороне, CDN в настоящее время является не опцией для нас)?
Mongo DB вам подойдет. Я еще не использовал его для BLOB-объектов, но вот хорошее интервью подкаста FLOSS Weekly с Майклом Дирольфом из команды Mongo DB, где он обращается к этому варианту использования.
Что ж, очевидным выбором будет CDN. Поскольку этого нет, я бы сказал, что лучшим выбором для обеспечения отказоустойчивости и балансировки нагрузки будет ваш собственный частный центр обработки данных (что бы это ни значило для вас) за двумя или более балансировщиками нагрузки, такими как F5. Это будет ваша самая простая система управления, и вы сможете добиться максимальной отказоустойчивости, насколько позволяет бюджет вашего оборудования. Вам не понадобятся новые знания в области программного обеспечения, только XCOPY.
Для истинной отказоустойчивости вам понадобится географическая разбросанность, иначе вам придется столкнуться с кем-нибудь, у кого есть экскаватор-погрузчик.
(Граватары?)
Хранить или не хранить изображения в БД или в файловой системе - это один из тех споров типа "священной войны"; каждая сторона считает, что ее способ делать вещи - единственно правильный. В целом:
Хранить в БД:
Для хранения в файловой системе:
Я склоняюсь на сторону файловой системы, потому что она лучше масштабируется. Но в зависимости от размера вашего проекта, любой из вариантов, скорее всего, будет работать хорошо. В случае с NoSQL различия еще менее очевидны.
Если вы работаете в среде Python, рассмотрите модуль y_serial: http://yserial.sourceforge.net/
Менее 10 минут, вы сможете хранить и получать доступ к своим изображениям (фактически, любому произвольному объекту Python, включая веб-страницы) - в сжатом виде; NoSQL.