При сохранении файла в minio нужно указать бакет. Вначале собирался прописать в конфиге проекта дефолтный бакет и скидывать туда все загруженные картинки. Однако бакет с точки зрения ФС — это просто директория, в которую не хотелось бы сваливать десятки тысяч файлов.
Какую стратегию вы используете для управления бакетами в
Минио? Я думал написать небольшой модуль, который перед каждым сохранением файла будет запрашивать список всех бакетов, которые подвязаны к данному проекту, смотреть на кол-во файлов и выбирать для сохранения бакет с наименьшим числом файлов, но похоже, что не подходящего метода API.
Может быть, есть готовый модуль для решения этой задачи или просто более изящное решение?
romaro, вообще говоря, имеет смысл делать так же, как и при хранении в файловой системе, то есть делить на подкаталоги. Делать разные бакеты для этого не нужно.
Например, можно класть по датам:
uploadsbucket/2021/07/23/file_123.jpg
minio повторит такую же структуру каталогов, а сам файл будет каталогом с двумя файлами внутри - данными и метаданными.
Иван Шумов, тут проблема не в технологии как таковой, а в том, что её используют не по назначению или не учитывают фактические условия конкретного решения.
Например, некоторые пытаются использовать S3 как хостинг картинок, а потом их картинку кто-то вставляет в пост на reddit и они получают огромный счёт от Amazon. Это не проблема технологии, это проблема её непонимания.
Или вот воспринимают бакет как таблицу в базе данных, куда можно пихать объекты миллионами, но вот конкретно в реализации S3 в бесплатном продукте minio это работает не очень хорошо. При этом если minio использовать правильно, то оно работает реально хорошо и быстро.
shurshur, спасибо за помощь! А вы не подскажите, как создавать вложенные в бакет директории? Я смотрю API управления бакетами, там этого нет, а метод putObject требует указать только название и сам бакет.
Или мне достаточно указать путь в названии бакета?
shurshur, протестировал. Будет работать, если включить директорию в имя файла (второй параметр). Скажите, а такое количество вложенных директорий как-то повлияет на экспорт а AWS? Может быть там какие-то лимиты есть.
romaro, да, всё верно, имя объекта может включать путь к нему. Есть ли там какие-то лимиты не знаю, но с 5 уровнями вложенности проблем у minio не возникало. Насчёт экспорта в aws ничего сказать не могу.