Может быть, какая-то форма алгоритма бинарного поиска поможет?Например, начинайте с префиксов '' и 'm', затем на полпути и т. Д. Я думаю, что в конечном итоге вы получите каждый ключ максимум дважды или около того - вы перестанете требовать больше, когда у вас уже есть следующий маркер.
Как выбрать, с чего начать?Я думаю, возможно, подразделить на каждом цикле: запустить '' затем, когда эти результаты возвращаются, если '' результаты указывают на большее количество ключей, затем запустить 'nextmarker' в этом поиске ПЛЮС новый поиск на полпути между 'nextmarker' и 'z',Повторение.Используйте функцию, подобную хэш-функции, чтобы хранить все ключи только один раз.
Поскольку все запросы поступают в разных потоках и т. Д., Вам потребуется блокировка для добавления всех ключей.Тогда у вас есть проблема с тем, чтобы сохранить этот замок достаточно открытым, чтобы не замедлять работу, так что это будет зависеть от того, какой язык и т. Д. Вы используете.
Возможно, вы сможете сделать это быстрее, если ваш процесс выполняется на экземпляре EC2 в том же регионе, что и файлы S3.Скажем, файлы в США «стандартные».Тогда вам повезет, вы можете использовать ruby и что-то вроде Ironworker, чтобы войти туда и загрузить все ключи.После этого он может опубликовать на вашем сервере или создать файл на S3, содержащий список всех ключей или аналогичный.Для разных регионов или языков вам может потребоваться запустить собственный экземпляр EC2.
Я обнаружил, что перечисление ключей S3 намного быстрее в экземпляре EC2, поскольку существует большая пропускная способность (которую вы не платите)для EC2) для каждого запроса.S3 НЕ передает сообщения, которые являются очень пушистыми XML, поэтому полоса пропускания между вами и S3 имеет решающее значение.