@TransparentFox

Структура директорий для хранения статических файлов сайта?

Файлов может быть несколько десятков миллионов.
Из того что я нашел, рекомендуется разбивать по ~1000 файлов на одну директорию.
Поэтому предполагаю примерно такую структуру:
{ceil(номер файла / 1 000 000)}/{ceil((номер файла % 1 000 000) / 1 000)}/файл
т.е.
{номер миллиона файлов по порядку}/{номер тысячи файлов в текущем миллионе по порядку}/файл
Номер файла планирую получать из id файла в БД.

Также есть вопрос с устранением повторяющихся имен файлов. Можно менять имя файла на hash или uuid, но по задаче желательно, чтобы пользователь мог скачать файл с оригинальным именем (под которым был загружен файл).
Поэтому в случае двух файлов с одинаковым именем можно создавать свою отдельную директорию для последнего. Т.е.
{номер миллиона файлов по порядку}/{номер тысячи файлов в текущем миллионе по порядку}/{номер файла по порядку в текущей директории}/файл
Но у этого варианта остается проблема с ситуацией, когда обработчик получает 2 одновременных запроса с одинаковым именем файла, проверяет наличие файлов с таким именем в соответствующей директории (или в БД) и приходит к выводу что дубликатов нет.

Нужны подсказки - есть ли другие варианты, или можно ли в этом варианте решить проблему с двумя конкурентными запросами. Также возможно что-то нужно поменять в структуре директорий?)

UPD:
Нашел решение для двух одновременных запросов. Использовать 'x' модификатор для fopen. https://stackoverflow.com/questions/15306771/php-f...
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
Jump
@Jump
Системный администратор со стажем.
Хэшируете файл и используете хэш в качестве имени.
Это обеспечивает быстрый поиск и удобное и главное равномерное размещение по директориям - и как результат быстрый доступ.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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