Не существует «лучшего» способа сделать это с точки зрения файловых систем - например, 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-серверам, а не просто по нескольким каталогам.