Стоит ли хранить сотни миллионов маленьких изображений в хранилище ключей / значений или другой базе данных nosql? - PullRequest
2 голосов
/ 12 ноября 2010

Я занимаюсь разработкой веб-системы для обработки очень большого набора небольших изображений, около 100 миллионов изображений размером от 50 до 200 КБ, работающих на ReiserFS.

На данный момент это очень difficult to backup and sync тебольшое количество маленьких файлов.

Мой вопрос заключается в том, что если будет хорошей идеей сохранить эти небольшие изображения в хранилище ключей / значений или другой базе данных nosql, такой как GridFS (Mongodb), Tokyo Tyrant, Voldemort, чтобы повысить производительность и улучшитьподдержка резервного копирования?

Ответы [ 3 ]

2 голосов
/ 16 ноября 2010

Прежде всего, взгляните на это: Хранение миллионных изображений в файловой системе . Хотя речь идет не о резервных копиях, но стоит обсудить эту тему под рукой.

И да, большое количество маленьких файлов надоедливо; Они занимают inode, требуют места для имен файлов & c. (И для резервного копирования всех этих метаданных требуется время). По сути это звучит так, как будто вы разобрались с сервировкой файлов; если вы запустите его на nginx с varnish впереди или около того, вы вряд ли сможете сделать это быстрее. Добавление базы данных под этим только усложнит ситуацию; также когда дело доходит до резервного копирования. Увы, я бы предложил больше работать над стратегией резервного копирования FS на месте.

Прежде всего, вы пробовали rsync с -az -ключами (архив и сжатие, соответственно)? Они, как правило, очень эффективны, поскольку не передают одни и те же файлы снова и снова.

С другой стороны, я бы предложил использовать tar + gz для нескольких файлов. В псевдокоде (и при условии, что вы получили их в разных подпапках):

foreach prefix (`ls -1`):
    tar -c $prefix | gzip -c -9 | ssh -z destination.example.tld "cat > backup_`date --iso`_$prefix.tar.gz"
end

Это создаст ряд .tar.gz-файлов, которые легко переносятся без особых накладных расходов.

1 голос
/ 12 ноября 2010

Другая альтернатива - хранить изображения в SVN и фактически иметь папку изображений на веб-сервере в качестве svn-песочницы изображений. Это упрощает резервное копирование, но не влияет на производительность.

Конечно, убедитесь, что вы настроили свой веб-сервер так, чтобы он не обслуживал файлы .svn.

1 голос
/ 12 ноября 2010

Если все ваши изображения или, по крайней мере, те, к которым обращаются чаще всего, помещаются в память, то mongodb GridFS может превзойти необработанную файловую систему. Вы должны экспериментировать, чтобы узнать.

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

...