Каков наиболее эффективный способ проверки наличия нескольких ключей s3 в одной корзине в python? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть список ключей S3 для того же сегмента my_s3_bucket.

Какой самый эффективный способ выяснить, какие из этих ключей действительно существуют в aws S3.Под эффективностью я подразумеваю низкую задержку и, надеюсь, низкое использование полосы пропускания сети.

Примечание: ключи не используют один и тот же префикс, поэтому фильтрация по одному префиксу не эффективна

Два неоптимальных подходаЯ могу думать о:

  1. Проверять наличие каждого ключа, один за другим
  2. Перечислять все ключи в ведре и проверять локально.Это не хорошо, если общее количество ключей велико, так как перечисление ключей по-прежнему повлечет за собой множество сетевых вызовов.

Есть ли лучшая альтернатива?

1 Ответ

0 голосов
/ 01 июня 2018

Чтобы ответить на ваш вопрос: S3 API не предоставляет альтернативы.

Использование нескольких потоков или асинхронного ввода-вывода - это надежный способ сократить реальное время, необходимое для выполнения нескольких запросов, выполняя их вПараллельно, как вы упомянули.

Дальнейшее усовершенствование, которое, возможно, стоит рассмотреть, заключалось бы в том, чтобы обернуть эту логику в лямбда-функцию AWS, которую можно вызывать с именем корзины и списком ключей объекта в качестве аргументов.Распараллелить операции с контейнерами внутри лямбда-функции и вернуть результаты вызывающему, уже проанализированному и обработанному, в одном аккуратном ответе.Это позволило бы использовать большую часть полосы пропускания между функцией и S3 в сети AWS в этом регионе, что должно быть самым быстрым местом для этого.Лямбда-функции - отличный способ абстрагироваться от любого взаимодействия AWS, которое требует нескольких запросов API.

Это также позволяет при желании написать вашу лямбда-функцию на другом языке, нежели основной проект, потому что язык не имеет значения через эту границу - это просто JSON, пересекающий границу между ними.На мой взгляд, некоторые взаимодействия AWS проще (или выполнять сложными последовательными / параллельными способами) на некоторых языках, чем на других, поэтому, например, ваша функция может быть написана на Node.JS, даже если ваш проект написан на Python.и это не будет иметь никакого значения, когда речь заходит о вызове funcrion и использовании генерируемого им ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...