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

87

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

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

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

Нихил Гупте
источник

Ответы:

124

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

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

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

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

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

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

  • совершенно другой контент - наличие отдельных сегментов для изображений, звука и других данных делает архитектуру более разумной
  • существенно разные ACL - если у вас может быть одна корзина с каждым объектом, получающим определенный ACL, или две корзины с разными ACL и без объектно-зависимых ACL, возьмите две корзины.
Джеймс Брэди
источник
в S3 есть корзины, а затем внутри могут быть «папки» и «объекты», где папка, вероятно, является объектом в глазах системы
mwm
14
@mwm ты ошибаешься. «Папки» - это строго тонкости пользовательского интерфейса, обеспечиваемые любым инструментом, который вы используете. Джеймс прав в том, что на клавишах могут быть косые черты, но что s3 это не волнует - он определенно не считает их папками.
Ry4an Brase
S3 определенно ограничивает скорость запросов на основе префикса пути, посмотрите официальную документацию: docs.aws.amazon.com/AmazonS3/latest/dev/…
Анатолий
Не S3 Префиксы больше не нужны или не рекомендуется: aws.amazon.com/about-aws/whats-new/2018/07/...
Aea
-3

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

Джим Близард
источник