Для того чтобы AWS мог обрабатывать миллиарды запросов в секунду, им необходимо защитить данные, чтобы они могли оптимизировать пропускную способность.Для этого они разбивают данные на разделы на основе первых 6-8 символов ключа объекта.Помните, что S3 не является иерархической файловой системой, это всего лишь хранилище значений ключей, хотя ключ часто используется как путь к файлу для организации данных, префикс + имя файла.
Теперь это не проблема, если вы ожидаетеменее 100 запросов в секунду, но если у вас есть серьезные требования к этому, вам нужно подумать о присвоении имен.
Для максимальной параллельной пропускной способности вы должны учитывать, как используются ваши данные, и использовать самые разные символы в началевашего ключа, или даже сгенерируйте 8 случайных символов для первых 8 символов ключа.
например, если предположить, что первые 6 символов определяют раздел:
files/user/bob
будет плохо , поскольку все объекты будут находиться в одном разделе files/
.
2018-09-21/files/bob
будет почти таким же плохим , если только сегодняшние данные читаются из раздела 2018-0
.Но немного лучше , если объекты читаются из прошлых лет.
bob/users/files
было бы довольно хорошо , если разные пользователи, вероятно, будут использовать данные в одно и то же время.время от раздела bob/us
.Но не так хорошо, если Боб, безусловно, самый загруженный пользователь.
3B6EA902/files/users/bob
будет лучше для производительности, но более сложным для ссылки, где первая часть является случайной строкой, это будетбыть довольно равномерно распределенным.
В зависимости от ваших данных, вам нужно подумать о каком-то одном моменте времени, кто что читает, и убедиться, что ключи начинаются с достаточной вариации для правильного разбиения.
Для вашего примера предположим, что раздел взят из первых 6 символов ключа:
для ключа Development/Projects1.xls
ключ разделения будет Develo
для ключа Finance/statement1.pdf
ключ раздела будет Financ
для ключа Private/taxdocument.pdf
ключ раздела будет Privat
для ключа s3-dg.pdf
ключ раздела будет s3-dg.