Это хороший метод для хранения изображений в файловой системе сервера? - PullRequest
0 голосов
/ 22 августа 2011

Я занимаюсь разработкой веб-сайта социальной сети, и мне нужно найти простой и интуитивно понятный способ хранения загруженных пользователями изображений в файловой системе сервера, который будет хорошо масштабироваться по мере роста сайта.

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

/server_img_path/<year>/<month>/<day>/<hour>/<minutes>/<seconds>/<milliseconds>/<img_id>.png

Что ты думаешь? Есть ли недостатки в этом? Есть ли лучшие способы? Спасибо за ваш совет.

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

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

  • множество бессмысленных inode
  • файловую систему, которая является кошмаром для навигации, когда вы поддерживаете ее.

Гораздо лучше отделять эти данные от тире (-), подчеркиваний (_) или вовсе не указывать.

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

Кроме того, поскольку вы включаете идентификатор изображения, миллисекунды, по крайней мере, бессмысленны,Если идентификатор соответствует первичному ключу в таблице БД, почему бы просто не назвать свой файл <id>.png и покончить с этим?

Я бы предложил что-то более похожее на это:

/server_img_path/<year>/<month>/<day>/<hour><minutes><seconds><img_id>.png

... или даже лучше (и проще) ...

/server_img_path/<year>/<month>/<img_id>.png

KISS .

1 голос
/ 22 августа 2011

Если у вас есть последовательные идентификаторы, почему бы не использовать ID / 100 в качестве имени папки?Таким образом, у вас всегда будет 100 файлов в папке.Или даже используйте ID >> 8 (1024 файла в папке).

...