S3 non rispetta gli spazi dei nomi gerarchici. Ogni bucket contiene semplicemente un numero di mappature dalla chiave all'oggetto (insieme ai metadati associati, agli ACL e così via).
Anche se la chiave del tuo oggetto potrebbe contenere un "/", S3 tratta il percorso come una semplice stringa e inserisce tutti gli oggetti in uno spazio dei nomi semplice.
Nella mia esperienza, le operazioni LIST richiedono (linearmente) più tempo all'aumentare del conteggio degli oggetti, ma questo è probabilmente un sintomo dell'aumento dell'I / O richiesto sui server Amazon e lungo il cavo fino al client.
Tuttavia, i tempi di ricerca non sembrano aumentare con il conteggio degli oggetti - molto probabilmente è una sorta di implementazione della tabella hash O (1) alla loro estremità - quindi avere molti oggetti nello stesso bucket dovrebbe essere altrettanto performante di piccoli bucket per il normale utilizzo (es non ELENCHI).
Per quanto riguarda l'ACL, le concessioni possono essere impostate sul bucket e su ogni singolo oggetto. Poiché non esiste una gerarchia, sono le tue uniche due opzioni. Ovviamente, l'impostazione di tutte le concessioni a livello di bucket ridurrà notevolmente i problemi di amministrazione se hai milioni di file, ma ricorda che puoi solo concedere autorizzazioni, non revocarle, quindi le concessioni a livello di bucket dovrebbero essere il sottoinsieme massimo dell'ACL per tutti il suo contenuto.
Consiglierei di dividerlo in bucket separati per:
- contenuto completamente diverso: avere bucket separati per immagini, suoni e altri dati rende l'architettura più sana
- ACL significativamente diversi: se puoi avere un bucket con ogni oggetto che riceve un ACL specifico o due bucket con ACL diversi e nessun ACL specifico per oggetto, prendi i due bucket.