Файловая иерархия для хранения изображений на сайте социальной сети? - PullRequest
4 голосов
/ 06 декабря 2011

Какой тип файловой системы полезен для хранения изображений на веб-сайте социальной сети, насчитывающем около 50 тысяч пользователей?

Я хочу сказать, как создать каталог? Какой должна быть иерархия папок для хранения изображений (например, по альбому или по пользователю).

Я знаю, что сейчас Facebook использует стог сена, но до этого он использовал простую NFS. Какова иерархия NFS?

1 Ответ

0 голосов
/ 24 октября 2015

Не существует «лучшего» способа сделать это с точки зрения файловых систем - например, NFS не имеет никакой установленной «иерархии», кроме каталогов, которые вы создаете в общем ресурсе NFS, где вы пишетеphotos.

Каждый базовый тип файловой системы (не NFS, я имею в виду файловую систему на стороне сервера, с которой вы будете использовать NFS для обслуживания файлов) имеет свои отличительные характеристики производительности, но, вероятно, все они будут относительно быстрыми(O(1) или хотя бы O(log(n))) способ поиска файлов в каталоге.По этой причине вы можете в принципе создать любую структуру каталогов, какую захотите, и получить «не страшную» производительность.Следовательно, вы должны принять решение, основываясь на том, что делает написание и поддержку вашего приложения наиболее простым, особенно если у вас сейчас относительно небольшое количество пользователей.

При этом я пытался решить эту проблему иЕсли бы я хотел использовать относительно простое решение, я бы, вероятно, дал каждой фотографии длинное случайное число в шестнадцатеричном формате (например, b16eabce1f694f9bb754f3d84ba4b73e) или использовал контрольную сумму фотографии (например, вывод из бега md5 / md5sum на фотографиифайл, например 5983392e6eaaf5fb7d7ec95357cf0480), а затем разделите его на префикс «directory» и суффикс «filename», например 5983392e6/eaaf5fb7d7ec95357cf0480.jpg.Выбор того, как далеко от числа создать разделение, будет определять, сколько файлов вы получите в каждом каталоге.Затем я бы сохранил число / контрольную сумму в виде столбца в таблице базы данных, которую вы используете для отслеживания загруженных фотографий.

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

Если вы когда-либо обнаружите, что выбранная вами точка разделения больше не может масштабироваться, поскольку для нее требуется слишком много файлов в каталоге, вы можете просто добавить еще один уровень вложенности каталога, например, переключившись с 5983392e6/eaaf5fb7d7ec95357cf0480.jpg на 5983392e6/eaaf5fb7/d7ec95357cf0480.jpg.Кроме того, если ваш единственный NFS-сервер больше не может обрабатывать нагрузку самостоятельно, вы можете использовать префикс для распределения фотографий по нескольким NFS-серверам, а не просто по нескольким каталогам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...