No, non esiste un proiettile magico.
(Per inciso, devi capire che non esiste una "directory" in S3: ci sono solo oggetti con percorsi. Puoi ottenere elenchi simili a directory, ma il carattere '/' non è " t magic - puoi ottenere prefissi di qualsiasi carattere tu voglia.)
Come qualcuno ha sottolineato, "pre-zippandoli" può aiutare sia a scaricare la velocità che a aggiungere velocità. (A spese dell'archiviazione duplicata.)
Se il download è il collo di bottiglia, sembra che il download sia in serie. S3 può supportare migliaia di connessioni simultanee allo stesso oggetto senza far fatica. Avrai bisogno di eseguire benchmark per vedere quante connessioni sono le migliori, dal momento che troppe connessioni da una casella potrebbero essere rallentate da S3. E potresti dover fare un po 'di TCP tuning quando fai 1000 di connessioni al secondo.
La "soluzione" dipende in gran parte dai modelli di accesso ai dati. Prova a ri-organizzare il problema. Se i download di file singoli non sono frequenti, potrebbe essere più logico raggrupparli 100 alla volta in S3, quindi suddividerli quando richiesto. Se si tratta di file di piccole dimensioni, potrebbe avere senso memorizzarli nella cache sul filesystem.
Oppure potrebbe avere senso memorizzare tutti i 5000 file come un grande file zip in S3 e utilizzare uno "smart client" in grado di scaricare intervalli specifici del file zip per servire i singoli file. (S3 supporta gli intervalli di byte, come ricordo).
http://www.w2lessons.com/2012/01/fast-zipping-in-amazon-s3.html –
l'ho visto, ma richiede comunque il download di ogni file individualmente su ec2, che è attualmente il collo di bottiglia – Jin