Хранение изображений в хранилищах NoSQL

Наше приложение будет служить большому количеству маленьких, изображения размера миниатюры (о 6-12KB в размере) через HTTP. Меня попросили заняться расследованиями, является ли использование хранилища данных NoSQL эффективным решением для хранения данных. Идеально, мы хотели бы, чтобы наше хранилище данных было отказом-toerant и распределенный.

Действительно ли это - хорошая идея сохранить блобы в хранилищах NoSQL, и какой хорош для него? Кроме того, действительно ли NoSQL является хорошим решением для нашей проблемы, или мы были бы лучше обслужены, храня изображения в файловой системе и служа им непосредственно от веб-сервера (как в стороне, CDN в настоящее время является не опцией для нас)?

16
задан mustaccio 1 September 2017 в 17:22
поделиться

4 ответа

Mongo DB вам подойдет. Я еще не использовал его для BLOB-объектов, но вот хорошее интервью подкаста FLOSS Weekly с Майклом Дирольфом из команды Mongo DB, где он обращается к этому варианту использования.

9
ответ дан 30 November 2019 в 21:19
поделиться

Что ж, очевидным выбором будет CDN. Поскольку этого нет, я бы сказал, что лучшим выбором для обеспечения отказоустойчивости и балансировки нагрузки будет ваш собственный частный центр обработки данных (что бы это ни значило для вас) за двумя или более балансировщиками нагрузки, такими как F5. Это будет ваша самая простая система управления, и вы сможете добиться максимальной отказоустойчивости, насколько позволяет бюджет вашего оборудования. Вам не понадобятся новые знания в области программного обеспечения, только XCOPY.

Для истинной отказоустойчивости вам понадобится географическая разбросанность, иначе вам придется столкнуться с кем-нибудь, у кого есть экскаватор-погрузчик.

(Граватары?)

3
ответ дан 30 November 2019 в 21:19
поделиться

Хранить или не хранить изображения в БД или в файловой системе - это один из тех споров типа "священной войны"; каждая сторона считает, что ее способ делать вещи - единственно правильный. В целом:

Хранить в БД:

  • Легче управлять резервным копированием/репликацией всего сразу в одном месте.
  • Помогает в обеспечении согласованности и целостности данных. Вы можете установить для поля BLOB запрет на NULL, но вы не сможете предотвратить удаление внешнего файла. (Хотя это не применимо к NoSQL, поскольку здесь нет традиционных ограничений).

Для хранения в файловой системе:

  • Файловая система предназначена для хранения файлов. Позвольте ей делать свою работу.
  • БД часто является узким местом в приложении. Чем больше нагрузки вы можете с нее снять, тем лучше.
  • Легче обслуживать через CDN (что, как вы упомянули, не применимо в вашей ситуации).

Я склоняюсь на сторону файловой системы, потому что она лучше масштабируется. Но в зависимости от размера вашего проекта, любой из вариантов, скорее всего, будет работать хорошо. В случае с NoSQL различия еще менее очевидны.

10
ответ дан 30 November 2019 в 21:19
поделиться

Если вы работаете в среде Python, рассмотрите модуль y_serial: http://yserial.sourceforge.net/

Менее 10 минут, вы сможете хранить и получать доступ к своим изображениям (фактически, любому произвольному объекту Python, включая веб-страницы) - в сжатом виде; NoSQL.

2
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: