brokoli
написал 11 января 2009 года в 11:52 (875 просмотров)
Ведет себя
неопределенно; открыл 1 тему в форуме.
Приветствую.
Есть каталог /img , в нем более 12 тыс. картинок.
Нужно оптимизировать размещение рисунков, так чтобы поиск каждой картинки (на диске) занимал минимальное количество системных ресурсов компьютера, на котором располагается сайт. ОС — FreeBSD 6.2-STABLE , размер кластера на диске — 512 байт.
Специальное условние: сайт проиндексирован поисковыми системами и активно посещается — ни те, ни другие «обижать» и показывать им «404» нельзя, поэтому перемещение картинок нужно сделать «прозрачно», чтобы пользователи ничего не заметили.
какими методами можно оптимизировать размещение файлов на диске и доступ ?
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
а точно проблема в размещении?
просто без просмотра всего содержимого директории,
т.е. при «выдергивании» отдельной картринки проблем со скоростью не будет
Нет. Проблемы при обращении будут.
В файловой системе диретория — это файл. Каждой «строкой» директории является запись об одном из «лежащих в ней» файлов. Каждая запись состоит из имени файла и номера файла (номера индексного дескриптора). При обращении к файлу осуществляется разрешение имени файла в его номер… поэтому скорость «обращения к файлу» сильно зависит от того, в которой строке это имя в директории… если в начале — будет быстро, если в конце — медленно.
Стандартным решением для таких ситуаций является распределения файлов по под директориям. Обычно делают 2 дополнительных уровня. В качестве «ключа» — используют хэш (MD5/SHA1/256/512/2) имени файла. Название директорий на первом уровне — первые две буквы ключа, на втором — вторые две. На выходе получается уравновешенное дерево (хэш ключи распределяются равномерно по определению). Если считать, что директория работает нормально, если в ней от 500 до 1000 файлов — в такой структуре нормально можно хранить от 32 до 65 миллионов файлов.
P.S. Что касается процесса переезда и т.д. — решается на месте, не должно составлять проблемы (можно придумать систему с симлинками на момент переезда).
Что касается «отдачи этого по http» — наиболее эффективным способом (с точки зрения ресурсов) будет nginx сервер с написанным к нему perl модулем (который будет считать хэши к запрашиваемым именам) и отдавать файл из нужной директории.