2010-06-08 10 views
15

Eventuali duplicati:
How many files in a directory is too many?Quanti file in una directory sono troppi (su Windows e Linux)?

mi è stato detto che mettere troppi file in una directory può causare problemi di prestazioni in Linux e Windows. È vero? E se sì, qual è il modo migliore per evitarlo?

+0

Problemi di prestazioni quando si tenta di fare cosa? –

+2

Questa domanda è come "quanti utenti o processi sono troppi?". È interamente basato sul contesto, sull'attività e sulla tua definizione di "troppo". La risposta è probabile tra 100 e 10 milioni. – msw

+0

duplicato: http://stackoverflow.com/questions/466521/how-many-files-in-a-directory-is-too-many http://stackoverflow.com/questions/197162/ntfs-performance-and- grandi volumi di file e directory – leonbloy

risposta

10

Secondo this Microsoft article, il tempo di ricerca di una directory aumenta proporzionale al quadrato del numero di voci. (Anche se si trattava di un bug contro NT 3.5.)

Una domanda simile è stata posta sullo Old Joel on Software Forum. Una risposta è stata che le prestazioni sembrano diminuire tra 1000 e 3000 file e un poster ha raggiunto un limite rigido di 18000 file. Ancora un altro post afferma che sono possibili 300.000 file, ma i tempi di ricerca diminuiscono rapidamente quando tutti i nomi dei file 8.3 sono esauriti.

Per evitare directory di grandi dimensioni, creare uno, due o più livelli di sottodirectory e inserire i file in questi. Il tipo più semplice di hash utilizza le lettere del nome file. Quindi un file che inizia con abc0001.txt verrà inserito come \ b \ c \ abc0001.txt, assumendo che tu abbia scelto 3 livelli di nidificazione. 3 è probabilmente eccessivo: l'utilizzo di due caratteri per directory riduce il numero di livelli di nidificazione. per esempio. ab\abc0001.txt. Dovrai solo passare a due livelli di nidificazione se prevedi che qualsiasi directory avrà molto più di ca. 3000 file.

+0

La mia esperienza con due livelli di sottodirectory di nidificazione A-Z + 0-9 su un server di rete è problematica. Per qualche motivo, Windows sembra impiegare un'eternità per elencare i file, anche se ogni singola sottodirectory contiene circa 10 file o meno. –

+0

Posso confermare che è possibile ottenere circa 250.000 file per cartella su NTFS. In realtà non è così lento come si potrebbe pensare se si modificano le impostazioni di Windows Explorer. –

8

Il file system di Windows è attualmente NTFS. La quantità massima di file su un volume è 4.294.967.295. La catalogazione dei file sull'unità si svolge in un albero B + che offre una ricerca di registro (N).

Sul vecchio FAT32 c'era un limite di 64K file in una cartella. L'indicizzazione veniva fatta anche da un elenco per cartella, quindi dopo un paio di migliaia di prestazioni drasticamente abbandonate. Probabilmente non devi preoccuparti di FAT32, a meno che il tuo pubblico non abbia DOS, Windows 95,98 o Millenium (Yuck).

Su Linux dipende molto dal file system che si sta utilizzando (potrebbe essere NTFS se si decide di farlo) extf3 ha una limitazione di 32k file per directory. La ricerca è anche B + Tree e ti darà la ricerca LOG (N)

Dopo aver esaminato ulteriormente questa domanda, la tua domanda dovrebbe riguardare le limitazioni dei file system.

+3

Se volesse conoscere le difficili limitazioni, è quello che avrebbe chiesto.Ci sono dei limiti "soft" in cui le prestazioni diventano meno che ideali, e ti imbatterai in questi limiti soft molto prima di raggiungere i limiti difficili. –

Problemi correlati