2012-07-02 18 views
5

Scenario: Un'app Django genera un sacco di piccoli file relativi agli oggetti in diversi modelli.Archiviazione di file system Django per un numero elevato di file

Ho eseguito molte ricerche per evitare la generazione di un numero elevato di file in una singola directory, quando si utilizza il Filestorage predefinito.

django-fsfield l'unica soluzione open source per questo? Qualcos'altro che consiglieresti per correggere il grande numero di inode in una dir?

Grazie!

risposta

2

Considerare l'archiviazione del contenuto in una raccolta MongoDB.

Poiché i file sono piccoli, è possibile creare documenti MongoDB con un singolo binary field contenente il contenuto del file. "Piccolo" in questo caso significa meno del limite di dimensione del documento MongoDB, attualmente 16 MB.

Se è necessario archiviare file di grandi dimensioni, Mongo lo supporta con gridfs.

Vedere anche When to use GridFS.

0

Inoltre, è possibile utilizzare un gestore di archiviazione personalizzato che, se un file è piccolo, lo salva in un modello di database con campo binario e salva piccoli file di più di 16 MB e non è necessario utilizzare altro database.

2

Sto usando django-castor.

django-ricino è un'applicazione riutilizzabile per Django che fornisce un back-end stoccaggio indirizzabile per contenuto. La classe principale, djcastor.storage.CAStorage, è un tipo di FileSystemStorage che salva i file sotto il loro digest SHA-1.

  • Non importa quante volte viene caricato lo stesso file, esso sarà sempre solo memorizzato una sola volta, eliminando così la ridondanza.

  • I nomi dei file sono pseudo e composto solo di caratteri esadecimali, quindi non dovete preoccuparvi di collisioni nome del file o sanificazione.

  • django-castor file di shards nella directory uploads basati sui loro digest ; questo impedisce problemi del file system quando troppi file si trovano in una singola directory .

Problemi correlati