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

Хранение статических файлов на сервере

Имеется 1 сервис. В данный момент файлы пользователей (изображения, PDF и т.д.) хранятся в общей папке на сервере. С каждым днем их количество прилично возрастает.

Система Debian 7 x64, EXT3

Вопрос состоит в том, стоит ли думать о разбивке хранилища на различные директории, поскольку не за горами в 1 директории окажется несколько миллионов файлов. Не очень глубоко знаком с низкоуровневой работой с файлами в Linux, поэтому буду рад услышать от знающих людей по какому пути пойти: оставить всё как есть или позаботиться о будущем, а также какие проблемы возможны в случае, если оставить «как есть».
Заранее благодарю за советы.
  • Вопрос задан
  • 7004 просмотра
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
Не рекомендуется сохранять огромное количество файлов в одной папке. Проблемы будут… Даже при 20к файлов в одной папке WA на сервере начнет сильно расти.
Имена файлов какие? Делайте минимум 2-3 подпапки и все будет хорошо.
У меня например на всех проектах первые 3 буквы хеша файла.
Для файл 71d9e9817d9d2e661abbaf3368e01529.jpg будет лежать в ..../7/1/d/71d9e9817d9d2e661abbaf3368e01529.jpg
Ответ написан
Комментировать
norlin
@norlin
Можно банальную разбивку по дате – года, месяца, дни. Либо, если файлов не очень много – только года и месяца. Но, в любом случае, такую разбивку лучше предусмотреть заранее.
Ответ написан
Комментировать
@niko83
Мне всегда хотелось попробвать подход с хранением кучи мелких файлов в одном файле, где нужная инфа вырывается по смещению + длинна. Такой подход используется на фэйсбук. Но что-то задач по этой части никогда не вырисовывалось.
Позже оказалось, что можно сделать еще лучше. Изображения стали хранить в больших бинарных файлах (blob), предоставляя приложению информацию о том, в каком файле и с каким отступом (по сути, идентификатором) от начала расположена каждая фотография. Такой сервис в Facebook получил название Haystack и оказался в десять раз эффективнее «простого» подхода и в три раза эффективнее «оптимизированного»

если захотите опробовать такой подход — отпишитесь о результатах
Ответ написан
Chamie
@Chamie
не за горами в 1 директории окажется несколько миллионов файлов … какие проблемы возможны в случае, если оставить «как есть».
Даже удалить будет не так-то легко:
Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки
Так как же удалить миллионы файлов из одной папки?
Ответ написан
Комментировать
@horlon
Обязательно нужно по папкам разнести. Тормозить будет адски, а еще механику дисков изнашивать читая огромные колличества файлов (говорят даже диски сыпались из-за такого). На личном опыте скажу в папке, в идеале, не должно быть больше 1000 файлов или папок (можно и больше, но это уже бъет по производительности).
Я обычно по счетчике расспределяю файлы.
Допустим, есть десять папок 0-9 (можно еще и латинские буквы вмешать — тогда и больше), в каждой есть еще по 10 таких же в них еще по 10. Допустим хочу сохранить миллион файлов (по 1000 файлов в папке). Нужно всего три уровня вложенности.
Конечно если предусматриваеться, что папки будут создаваться автоматически (вручную такое задолбетесь создавать).
Первые 1000 файлов (с первого по 1000 файл) будут лежать в папке 0/0/0
Вторые 1000 файлов (с 1000 по 2000 файл) будут лежать в папке 0/0/1
И т.д. Но лучше делать с запасом, например 6-8 уровней (например 0/0/0/0/0/0/0/0, и файлы нужно лить только в последние уровни во избежание путаницы, когда есть папки с именами 0-9, файли из которых разольет по уровням — не соберете).
И еще одно можно создавать папки и так: 000 — 999, не вкладывая папка в папку, как угодно но учтите еще длинну пути до поледнего вложенного файла, чтобы еще и она держалась в рамках допустимого (жалательно не превышать 256 символов — зависит еще и от файловой системы).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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