@eugene8086
Математик

Как лучше хранить огромное число небольших файлов?

На сайте из LaTeX выражений генерируются png картинки с формулами. Они небольшие, но их очень много. Чтоб часто их не генерировать, они кэшируются. Пока картинок не очень много - видимых проблем нет. Но я уже задумываюсь, что будет дальше. Как лучше хранить огромное число небольших файлов? Хранить ли их в одной папке, или делать дерево вложенных папок такого вида /x1/x2/x3/.../xn/filename, где символы x1,...,xn пробегают, например, все значения от 0 до F. Если лучше хранить в дереве папок, то какая глубина вложенности оптимальная?
Система Debian, файлы считываются и отдаются с помощью PHP-скрипта.
  • Вопрос задан
  • 1195 просмотров
Решения вопроса 1
neatsoft
@neatsoft
Life is too short for bad software
Классический вариант - считать hash (md5, sha1, или sha256) для каждого файла при добавлении, в базе данных хранить хэш - имя фала - размер (опционально), а для записи на диск использовать следующий путь:
./e3/b0/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
первый уровень вложенности - первые два символа хэша в шестнадцатеричном представлении, второй уровень - третий и четвертый символ, имя файла - хэш; количество уровней вложенности можно увеличить, если файлов очень много.

В качестве альтернативного варианта рассмотрите возможность хранения этих объектов в базе данных. Обычно это не лучшая идея, но в вашем случае такой вариант может оказаться предпочтительным. Если на каждой странице содержится множество маленьких объектов, можно уменьшить количество запросов к серверу упаковывая их все в один ajax ответ на стороне сервера (получая содержимое из базы данных), и распаковывая с помощью javascript на клиенте. В некоторых случаях это может приводить к увеличению быстродействия (необходимо проверять на реальных данных).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nirvimel
Хранить ли их в одной папке

Ни в коем случае!

Если лучше хранить в дереве папок, то какая глубина вложенности оптимальная?

Цель - распределить файлы так, чтобы в любом каталоге находилось не более тысячи (максимум - несколько тысяч) файлов. То есть, до нескольких миллионов файлов - двух уровней иерархии достаточно.

Почему так? - См. ответ Как лучше организовать электронную библиотеку?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы