Numero massimo di file per directory in S3


87

Se avessi un milione di immagini, sarebbe meglio archiviarle in una gerarchia di cartelle / sottocartelle o semplicemente scaricarle tutte direttamente in un secchio (senza cartelle)?

Scaricare tutte le immagini in un bucket senza gerarchia rallenterebbe le operazioni LIST?

C'è un sovraccarico significativo nella creazione di cartelle e sottocartelle al volo e nell'impostazione dei loro ACL (parlando in modo programmatico)?

Risposte:


127

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.

in S3 ci sono i bucket e quindi all'interno puoi avere 'cartelle' e 'oggetti' dove una cartella è probabilmente un oggetto agli occhi del sistema
mwm

14
@mwm ti sbagli. Le "cartelle" sono rigorosamente sottigliezze dell'interfaccia utente fornite da qualunque strumento tu stia utilizzando. James ha ragione sul fatto che le chiavi potrebbero avere delle barre, ma a s3 non interessa affatto - sicuramente non le considera cartelle.
Ry4an Brase

S3 fa sicuramente richieste di limite di velocità in base al prefisso del percorso, guarda i documenti ufficiali: docs.aws.amazon.com/AmazonS3/latest/dev/…
Anatoly

I prefissi S3 non sono più necessari o consigliati: aws.amazon.com/about-aws/whats-new/2018/07/…
Aea


-3

Uso una struttura di directory con una radice e quindi almeno una sottodirectory. Uso spesso "data di importazione del documento" come directory sotto la radice. Questo può rendere la gestione dei backup un po 'più semplice. Qualunque sia il file system che stai utilizzando, alla fine raggiungerai un limite di conteggio dei file (un limite pratico se non fisico). Potresti anche pensare di supportare più radici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.