Задача — утягивать файлы по url (видео, картинки) и складировать в хранилище. Так, чтобы впоследствии по url можно бы было получить сразу локальный файл. Без БД.
Файлов много, десятки, сотни тысяч. Количество год от года растёт.
Первый, много лет назад вариант был тупым — берём md5(url), разбиваем на две вложенности по два символа и сохраняем файл — storage/dd/75/dd753e96f09cf8afedc9882da55977a2.jpg
Попутно можно там же положить одноимённый .txt со ссылкой на исходный файл для обратного поиска.
Вариант всем хорош для небольших объёмов. На больших, да ещё под ext4, которая по мере старения на таких структурах начинает чудовищно тормозить, получился ад при любых работах по бэкапу/настройкам. rsync, занимающий десятки минут — это жесть. Если для аналогичного подхода с аттачами, имеющими дату вопрос решается просто — Мысли вслух. Предостережение от наступления на грабли. , то для произвольных ссылок так уже не поступить.
Кроме того, в таком виде крайне неудобно работать, если требуется ручная разборка архива. Посмотреть, с каких сайтов чаще грузятся данные и т.п.
Вторая версия была устроена чуть иначе. Файлы кладутся в каталоги, напоминающие исходные домены и пути. Например, storage/ru/li/linux.org.ru/tango/img/opensource-logo.png
Как ни странно, такая структура даже чуть легче при копировании, гораздо удобнее при анализе. Но всё равно очень избыточна и тяжела. Кроме того, возникают проблемы с URL, содержащими сложные для имён файлов символы — get-запросы и т.п.
Сейчас стоит задача сделать что-то подобное с нуля и можно подумать над более оптимальным решением. В голову всё равно ничего более толкового не приходит. Тем более, что вопрос «человекочитаемости» хранящихся данных в новой задаче становится даже более высоким, чем ранее.
Есть мысли, куда копать?
Update из темы:
— Задача: «архивирование Интернета». Через 5..10..15 лет остаётся очень мало доступных картинок, видео, аудио, на которые ссылаются на форумах. Хочется это дело эффективно кешировать, да ещё и раздавать потом через btsync желающим, тем более, что форумы планируется переводить на распределённый формат — Распределёные форумы/блоги. Продолжаем разговор. Нужен совет.
— Подразумевается использование в рамках p2p-системы на базе btsync или будущих аналогов. Т.е. никаких файлоспецифичных вещей, метаданных, спецсимволов и т.п. Должно работать хоть на vfat.
— Желательно, чтобы система могла уметь дробиться на отдельные архивы/репозитории.
— Вопрос индексирования мало актуален, т.к. данная система подразумевается бэкендом. Перед фронтедом может стоять кеширующая полноценная БД.
— Желателен человекочитаемый формат, чтобы можно было разгребать систему вручную.
— Участники обмена должны иметь возможность передавать данные в т.ч. из-за «серых NAT», потому и ориентируюсь на btsync и аналоги.
Так как-то.