Numero di file per directory


19

Ho una directory con circa 100000 piccoli file (ogni file è di 1-3 righe, ogni file è un file di testo). In termini di dimensioni, la directory non è molto grande (<2 GB). Questi dati vivono in un server NFS amministrato professionalmente. Il server esegue Linux. Penso che il filesystem sia ext3, ma non lo so per certo. Inoltre, non ho accesso come root al server.

Questi file sono il risultato di un esperimento scientifico su larga scala, sul quale non ho il controllo. Tuttavia, devo analizzare i risultati.

Qualsiasi operazione / elaborazione I / O in questa directory è molto, molto lenta. L'apertura di un file (fopen in python), la lettura da un file aperto, la chiusura di un file, sono tutti molto lenti. In bash ls, du, ecc. Non funzionano.

La domanda è:

Qual è il numero massimo di file in una directory in Linux in modo tale da rendere pratico l'elaborazione, il fopen, la lettura, ecc.? Capisco che la risposta dipende da molte cose: tipo di fs, versione del kernel, versione del server, hardware, ecc. Voglio solo una regola empirica, se possibile.


6
Giles ha risposto alla tua domanda diretta, ma tutto sommato, i filesystem di Linux sono dei sostituti scadenti per i database quando usi nomi di file come chiavi per piccoli frammenti di dati. Non controlli la generazione, ma puoi postelaborare i dati in un modulo più suscettibile di analisi; in caso contrario, pagherai l'overhead del file system ad ogni passaggio. Puoi ridurre il sovraccarico, ma potresti essere più felice se lo elimini.
msw,

Risposte:


22

Come si suppone, dipende da molte cose, principalmente dal tipo e dalle opzioni del filesystem e in una certa misura dalla versione del kernel. Nella serie ext2 / ext3 / ext4, si è verificato un notevole miglioramento quando è dir_indexapparsa l' opzione (qualche tempo dopo il rilascio iniziale di ext3): rende le directory memorizzate come alberi di ricerca (accesso al tempo logaritmico) piuttosto che elenchi lineari (accesso al tempo lineare ). Questo non è qualcosa che puoi vedere su NFS, ma se hai qualche contatto con gli amministratori puoi chiedere loro di eseguire tune2fs -l /dev/something |grep features(forse anche convincerli ad aggiornare?). È importante solo il numero di file, non le loro dimensioni.

Anche con dir_index, 100000 sembra grande. Idealmente, ottenere gli autori del programma che crea i file per aggiungere un livello di sottodirectory. Per nessun peggioramento delle prestazioni, consiglierei un limite di circa 1000 file per directory per ext2 o ext3 senza dir_indexe 20000 con dir_indexo reiserfs. Se non riesci a controllare come vengono creati i file, spostali in directory separate prima di fare qualsiasi altra cosa.

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.