E 'un problema di creare una directory per ciascun caricamento di file, in un'applicazione web su Linux / Unix?

StackOverflow https://stackoverflow.com/questions/1503356

Domanda

io sto facendo di caricamento file per una web-application (in esecuzione su Unix / Linux). Mi chiedo se ci sarebbe stato un problema se ho pensato di creare una nuova directory per ogni upload di file? Questo è l'approccio out-of-the-box per il Ruby on Rails plug-in "graffetta". Ho discutendo quello che il trade-off sono, o se forse non è solo una preoccupazione, se la distribuzione su un ambiente Linux / Unix.

Le opzioni sembrano essere:

  1. Una cartella per ogni file allegato - per come graffetta sembra funzionare out of the box
  2. Una cartella per ogni utente, forse (vale a dire se il servizio web ha più utenti con il loro conto proprio) - e poi uno avrebbe bisogno di aggiungere un po 'unicità al nome del file (forse il modello ID)
  3. Mettere tutti gli allegati in una cartella - ma questo è probabilmente andando troppo lontano l'altro modo

Domanda - Dovrei essere preoccupato per essere creato il numero di directory? E 'questo un problema per un O / S, se il servizio è stato popolare? Qualche consiglio per un sito web che permetteva agli utenti con il proprio conto separato per caricare i file, quale struttura potrebbe essere buono per quanto riguarda la loro memorizzazione? (Credo di aver scontato il concetto di memorizzazione dei file in mysql.)

Grazie

È stato utile?

Soluzione

Supponendo Ext3 rigido formattato sotto Linux (la più comune).

Da ( http://en.wikipedia.org/wiki/Ext3 )

"C'è un limite di 31998 sub-directory per una directory, derivanti dal suo limite di 32000 collegamenti per inode. [13]"

Quindi, se ti ha colpito il limite di 32K arrivi, che non è così in alto, l'applicazione non riuscirà.

Altri suggerimenti

Non in quanto tale, ma avendo gazillions di cartelle in una directory (o lo stesso per i file) non è raccomandata (si tratta di un vero e proprio colpo di velocità).

Motivo: stringhe c-style

Una buona soluzione potrebbe essere quella di memorizzare le cose hierchially qualcosa di simile (sic?): / Path / to / / / / / file di usernamefirstletter nomeutente anno mese

Se si dispone di una partizione separata per la directory in cui i nuovi file / cartelle vengono creati, direi che non è un problema. Si può ottenere un problema se si utilizza un'altra partizione in quanto è possibile a corto di inode e / o spazio libero su disco, che può essere un male.

Utilizzo di una partizione separata sarebbe (in caso di un attacco DOS) solo fermare la vostra applicazione di funzionare correttamente e il sistema non farsi male in alcun modo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top