@phpcoder81

Какие имена директорий сделать для крупного проекта?

Всем привет. Есть некий проект, где регистрируются люди и выкладывают фото.
В планах для каждого юзера будет отводиться папка /pictures/000001/x.jpg, где 000001 это номер пользователя шестизначный (на перспективу), с заполненными нулями, а x.jpg имена файлов. Всего 1 юзер грузит по 30-100 таких файлов.

Столкнулся с проблемой недавно, тк сейчас все фото лежат в одной папке (/pictures/x.jpg). Файлов уже 25.000+, и папка при открытии жестко тупит, я представляю, что будет дальше.

Вот я и решил сделать разделение проекта логически на данную структуру, чтобы в каждой папке были записи одного юзера. Подскажите, НА БУДУЩЕЕ, универсальна ли данная схема (в плане расширения)?

Правильно ли я задумал идею? /pictures/000001/x.jpg
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 4
27cm
@27cm
TODO: Написать статус
Хранить ведущие нули в именах папок - лишнее. В целом решение вполне норм, вот только если пользователей, как вы написали, в перспективе станет 100 000+, то это это уже 100 000+ папок и опять возникает та же проблема.

Можно делать, например, как в git: берем хеш sha1 от данных файла, создаем папку из первых двух (или более) символов этого хеша, а внутрь заливаем данные. Получится что-то вроде:
/a4/b7fce097055c3cbd6879db9625f9a3890cc409.jpg
/a4/a66ce019422c3cbcbd69db9625f9a3890cda83.jpg
/8c/3c7fbcd903744b20fd7567a1fcefa99133b5bc.jpg
/e9/65047ad7c57865823c7d992b1d046ea66edf78.jpg
(Всего не более 256 папок)

Или если все файлы пронумерованы:
/a4/1.jpg
/a4/2.jpg
/8c/3.jpg
/e9/4.jpg

При таком подходе вы сами сможете регулировать количество папок, уровень вложенности и среднее число файлов в папках.
Ответ написан
Комментировать
thewind
@thewind
php программист, front / backend developer
Также вы можете просто разбивать пользователей на группы. Например, для пользователей с ID от 1 до 1000 хранить в папке /0/, для 1001 - 2000 в папке /1/
Таким образом номер папки будет получаться просто floor(id/1000)
Ответ написан
Комментировать
2ball
@2ball
Хардкор кодер
Папки организовать от id пользователя. Складывая по 1000 в каждую дочернюю. Т.е. принцип следующий:

/ceil($userId / 1000)/$userId/{files}

На выходе
/0/59/{files}
/1/1088/{files}

Этой организации хватит под ваш проект. Ни одна из директорий не превысит 1000 по содержимому и быстродействие сохраниться при вполне логичной структуре.
Ответ написан
Комментировать
@acspro
Не рекомендую называть папки с помощью user id. Все же это информация и она вполне может пригодиться при взломе.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
07 мая 2024, в 13:28
20000 руб./за проект
07 мая 2024, в 13:07
7000 руб./за проект
07 мая 2024, в 12:59
500 руб./за проект