Come posso archiviare e servire in modo più efficiente oltre 1.000.000 di file gziped su un server Web Linux?


10

Ho un grande contenuto statico che devo fornire tramite un server web basato su Linux. È un insieme di oltre un milione di piccoli file gzip. Il 90% dei file è inferiore a 1K e i file rimanenti sono al massimo 50K. In futuro, questo potrebbe aumentare a oltre 10 milioni di file gzip.

Dovrei mettere questo contenuto in una struttura di file o dovrei considerare di mettere tutto questo contenuto in un database? Se è in una struttura di file, posso usare directory di grandi dimensioni o devo prendere in considerazione directory più piccole?

Mi è stato detto che una struttura di file sarebbe più veloce per la consegna, ma dall'altro lato, so che i file occuperanno molto spazio sul disco, poiché i blocchi di file saranno più di 1K.

Qual è la migliore strategia per quanto riguarda le prestazioni di consegna?

AGGIORNARE

Per la cronaca, ho eseguito un test su Windows 7, con mezzo milione di file:

inserisci qui la descrizione dell'immagine

Risposte:


6

Immagino che una struttura FS sarebbe più veloce, ma avrai bisogno di una buona struttura di directory per evitare di avere directory con un numero molto grande di file.

Non mi preoccuperei troppo della perdita di spazio su disco. Ad esempio, con una dimensione di blocco di 16 KB, perderai 15 GB di spazio nel peggiore dei casi in cui è necessario un blocco aggiuntivo per ogni singolo file. Con le dimensioni del disco di oggi, questo è niente e puoi adattare i parametri del tuo file system per le tue esigenze specifiche.


5

Se si sceglie l'opzione della struttura dei file, una cosa che è possibile fare per migliorare le prestazioni dell'I / O del disco almeno in una certa misura è montare la partizione con noatime + nodiratime a meno che non sia necessario. Non sono affatto importanti, quindi consiglio di farlo. Forse puoi anche usare un'unità a stato solido.


4

Penso che la risposta corretta qui dipenda da come verranno indicizzati i file ... cosa determina quando un determinato file viene selezionato per la consegna.

Se stai già eseguendo una query nel database per determinare il nome del tuo file, potresti benissimo scoprire che stai meglio mantenendo il file proprio lì nel record del db, potresti trovare i migliori risultati modificando alcune impostazioni di paging nel tuo database di scegliere e quindi archiviare i file nel db (es: pagine più grandi per tenere conto di tutti i record BLOB), oppure potresti scoprire che stai ancora meglio usando il file system.

L'opzione del database ha qualche possibilità in più di risolversi perché, con un milione di record, è probabile che ogni file non abbia la stessa probabilità di essere interrogato. Se ti trovi in ​​una situazione in cui un file può essere interrogato più volte di seguito o quasi in una riga, il database può fungere da cache di fatto per i file recuperati di recente, nel qual caso avrai spesso il risultato del tuo file già caricato in memoria. Potrebbe essere necessario ottimizzare attentamente gli interni del motore di database per ottenere il comportamento desiderato.

Ma la cosa principale da togliere alla mia risposta è che non sai davvero cosa funzionerà meglio fino a quando non lo proverai con alcuni dati di test rappresentativi e misurerai i risultati.


1

Con i moderni filesystem non dovrebbe essere un grosso problema. Ho testato XFS con 1 miliardo di file nella stessa directory e sono abbastanza sicuro che ext4 funzionerà bene (purché il filesystem stesso non sia troppo grande). Dispone di memoria sufficiente per memorizzare nella cache le voci della directory; anche una cache del processore più grande sarà di grande aiuto.


2
I file system EXT non stanno affrontando molto bene con un elevato numero di file nella stessa directory; soprattutto non con le impostazioni directory_index predefinite. Non ho testato XFS con un numero di file così elevato nella stessa directory, ma sono abbastanza certo che EXT non funzionerà con nulla in remoto vicino a 1 miliardo nella stessa directory.
Hrvoje Špoljar,

1
Ho sentito che reiserfs è buono per file di piccole dimensioni, ma poi ho sentito anche il ragazzo che mantiene il software in prigione (!), Quindi il prossimo futuro di reiserfs è piuttosto incerto. Personalmente sceglierei EXT4 e XFS come seconda scelta. XFS non è il migliore per file di grandi dimensioni?
öde

Lo era, ma se si esegue un kernel nuovo (versione 3.0 e successive) funziona anche con file di piccole dimensioni.
Wazoox,
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.