Максимальное количество файлов в каталоге в S3

Если бы у меня было миллион изображений, было бы лучше сохранить их в какой-либо иерархии папок/подпапок или просто выгрузить их прямо в ведро (без каких-либо папок)?

Будет ли сброс всех изображений в ведро без иерархии замедлить операции LIST?

Есть ли значительные накладные расходы при создании папок и подпапок на лету и настройка их ACL (программно)?

Ответ 1

S3 не учитывает иерархические пространства имен. Каждое ведро просто содержит несколько отображений от ключа к объекту (вместе с соответствующими метаданными, ACL и т.д.).

Даже если ваш ключ объекта может содержать "/", S3 рассматривает путь как обычную строку и помещает все объекты в плоское пространство имен.

По моему опыту, операции LIST занимают (линейно) дольше по мере увеличения количества объектов, но это, вероятно, является признаком увеличения ввода-вывода, требуемого на серверах Amazon, и вниз по кабелю к вашему клиенту.

Однако время поиска не увеличивается с увеличением количества объектов - это скорее всего какая-то реализация хэш-таблицы O (1) на их конце - поэтому наличие множества объектов в одном и том же ковше должно быть таким же эффективным, как небольшие ведра для нормального (т.е. не LIST).

Что касается ACL, гранты могут быть установлены в ведро и на каждом отдельном объекте. Поскольку нет иерархии, они являются вашими двумя вариантами. Очевидно, что установка большого количества грантов в виде ведра значительно уменьшит ваши головные боли администратора, если у вас есть миллионы файлов, но помните, что вы можете разрешать только предоставлять, а не отменять их, поэтому гранты в виде ведра должны быть максимальное подмножество ACL для всего его содержимого.

Я бы рекомендовал разделить на отдельные ведра для:

  • совершенно другой контент - наличие отдельных ковшей для изображений, звуковых и других данных делает более разумной архитектуру.
  • Значительно разные ACL - если вы можете иметь один ведро с каждым объектом, получающим определенный ACL, или два ведра с разными списками ACL и не имеющие ACL для конкретного объекта, возьмите два ведра.

Ответ 3

У меня нет данных, но я предполагаю, что ковши помогут.

Поиск списка последовательно - это O (n). Если ведра могут помочь уменьшить количество файлов, которые вы должны искать, я не вижу, как они могут пострадать. Накладные расходы кажутся небольшой ценой.

Ответ 4

Я использую структуру каталогов с корнем, а затем, по крайней мере, одну вспомогательную директорию. Я часто использую "дату импорта документа" в качестве каталога под корнем. Это может облегчить управление резервными копиями. Независимо от того, какую файловую систему вы используете, вы в конечном итоге можете ограничить ограничение количества файлов (практическое, если не физическое ограничение). Вы можете подумать и о поддержке нескольких корней.