Задать вопрос

Хранение большого кол-ва файлов: БД или диск?

Приветствую всех!

Есть ~ 2 млн. файлов JPG, их нужно хорошо хранить, чтобы быстро и удобно. Нагрузка в пиках (2000 ранд. запросов/сек.)

1. Хранить на диске в разных папках md5 (linux, ext4)
2. Хранить в БД (key => value) (innodb, mysql)

Как будет быстрее и надежнее? или нет принципиальной разницы? я склоняюсь запихнуть все в базу.
  • Вопрос задан
  • 1057 просмотров
Подписаться 5 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 5
@BloodySucker
БД куда медленее.
Советую вообще jfs, а не ext4.
JFS куда выше производительность выдает, а на мелких файлах и подавно.
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
Если ваши файлы умещаются в памяти, то лучше это разруливать на уровне сервера. Скажем написать специализированный сервер и отдавать картинки по запросу. Если в памяти не умещаются, то неважно какая ФС - будет медленно, можете поставить SSD тогда.
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Если по файлам не надо искать, а только читать по известному пути - то БД будет только лишним слоем абстракции. И если только не ставить оракл - то ещё будет бесполезно дублировать кэш операционной системы.
Просто размазать по директориям будет проще и вполне достаточно.
А если надо искать что-то по метаданным - то обычно метаданные пишутся в БД, а сами файлы всё равно лежат на диске, а не в БД.

Из не очевидного: пару лет назад читал, что кто-то из больших проектов упаковывает мелкие файлы в крупные (по несколько гб) бинарники и сохраняет отдельно смещение от начала и длину сохраняемого файла - это работало значительно быстрее, чем обычная файловая система. Подробнее, к сожалению, не помню.
Ответ написан
opium
@opium
Просто люблю качественно работать
Мудаки те кто запихивает картинки в базу. Раскидайте в трехуровневую иерархию папок их и даже на ext4 оно будет шустро бегать
Ответ написан
Комментировать
kuroneco
@kuroneco
Системный администратор
Это не много.
1.В БД ты можешь хранить сам путь до них, если хочется возможности сортировки по каким-то параметрам и если планируется отдавать их через какое-то api или тип того.
2. Храните на диске. Но перед этим поставьте нечто, что будет кешировать (самые частые картинки) отданный материал nginx или squid. По файловой системе - озаботьтесь большим кол-вом inode и сортировкой файлов по папкам, а не одной кучей в одной папке.
Если планируется рост изображений, смотрите в сторону кластерных фс, чтобы не было узких мест, но с вашими размерами, хватит и одного диска.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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