Я хотел бы создать сервис для обслуживания нескольких сотен тысяч файлов меньшего размера (от 5 до 500 КБ, в основном около 10–100 КБ). Думайте об этом как о чем-то вроде gravatar.com, который обслуживает эти маленькие картинки аватаров по URL-адресам вроде https://secure.gravatar.com/avatar/1545f91437e2576b910dbd1023a44756
Я хочу использовать описательный URL без каких-либо идентификаторов или хешей, например, как http://www.server.com/This-is-my-file.ext, Нет повторяющихся имен файлов.
Что было бы наиболее эффективным способом обслуживания и организации файлов с небольшими накладными расходами?
Просто поместите все в один каталог и позвольте nginx обслуживать файлы, это замедлит работу после определенного количества файлов в зависимости от файловой системы.
Одна из идей - сохранить файлы в простой структуре каталогов, основанной на первых символах имени файла, поэтому пример будет обслуживаться из T / h / This-is-my-file.ext с простым правилом перезаписи в конфигурации nginx. . Это приведет к очень неравномерному распределению по разным каталогам. Использование значений из позволяет сказать, что хеш md5 имени файла приведет к хорошему распределению, но потребует большей вычислительной мощности ...
Я думаю, это звучит как идеальный вариант использования хранилища значений ключей, но разве невозможно с помощью файловой системы и nginx упростить его?
Хешируйте имена файлов.
# You can do this:
# I didn't test this.
location /hashed/([0-9a-f]{2})([0-9a-f]*)/(.*) {
try_files /$1/$2/$3;
}
set_md5 $digest $request_uri;
location / {
rewrite .* /hashed/$digest/$request_uri;
}